写点什么

【LeetCode】统计特殊四元组 Java 题解

作者:HQ数字卡
  • 2022 年 1 月 03 日
  • 本文字数:1216 字

    阅读完需:约 4 分钟

题目描述

给你一个 下标从 0 开始 的整数数组 nums ,返回满足下述条件的 不同 四元组 (a, b, c, d) 的 数目 :


nums[a] + nums[b] + nums[c] == nums[d] ,且 a < b < c < d


示例 1:
输入:nums = [1,2,3,6]输出:1解释:满足要求的唯一一个四元组是 (0, 1, 2, 3) 因为 1 + 2 + 3 == 6 。
示例 2:
输入:nums = [3,3,6,4,5]输出:0解释:[3,3,6,4,5] 中不存在满足要求的四元组。
示例 3:
输入:nums = [1,1,1,3,5]输出:4解释:满足要求的 4 个四元组如下:- (0, 1, 2, 3): 1 + 1 + 1 == 3- (0, 1, 3, 4): 1 + 1 + 3 == 5- (0, 2, 3, 4): 1 + 1 + 3 == 5- (1, 2, 3, 4): 1 + 1 + 3 == 5
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-special-quadruplets著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的算法题目统计特殊的四元组。题意简单明了,需要分别 nums[a] + nums[b] + nums[c] == nums[d] ,且 a < b < c < d 两个条件。

  • 首先,我们可以使用朴素解法得出这个题目的答案,观察朴素解法,发现有重复计算,时间复杂度较高。观察分析题目,我们可以采用倒序遍历,结合 hashmap, 可以减少一次循环。具体实现代码如下,供参考。

通过代码

  • 朴素解法


class Solution {    public int countQuadruplets(int[] nums) {        int ans = 0;        int n = nums.length;        if (n < 4) {            return ans;        }
for (int i = 0; i < n - 3; i++) { for (int j = i + 1; j < n - 2; j++) { for (int k = j + 1; k < n - 1; k++) { for (int m = k + 1; m < n; m++) { if (nums[i] + nums[j] + nums[k] == nums[m]) { ans++; } } } } }
return ans; }}
复制代码


  • 优化解法


class Solution {    public int countQuadruplets(int[] nums) {        int ans = 0;        int n = nums.length;        if (n < 4) {            return ans;        }        Map<Integer, Integer> map = new HashMap<>();        for (int c = n - 2; c >= 2; c--) {            map.put(nums[c + 1], map.getOrDefault(nums[c + 1], 0) + 1);            for (int a = 0; a < c - 1; a++) {                for (int b = a + 1; b < c; b++) {                    int temp = nums[a] + nums[b] + nums[c];                                          ans += map.getOrDefault(temp, 0);                }            }
}
return ans; }}
复制代码

总结

  • 朴素解法的时间复杂度是 O(n * n * n * n), 空间复杂度是 O(1)

  • 优化解法的时间复杂度是 O(n * n * n), 空间复杂度是 O(n)

  • 坚持算法每日一题,加油!

发布于: 3 小时前
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】统计特殊四元组Java题解