其他分享
首页 > 其他分享> > [LeetCode] 1995. Count Special Quadruplets

[LeetCode] 1995. Count Special Quadruplets

作者:互联网

Given a 0-indexed integer array nums, return the number of distinct quadruplets (a, b, c, d) such that:

Example 1:

Input: nums = [1,2,3,6]
Output: 1
Explanation: The only quadruplet that satisfies the requirement is (0, 1, 2, 3) because 1 + 2 + 3 == 6.

Example 2:

Input: nums = [3,3,6,4,5]
Output: 0
Explanation: There are no such quadruplets in [3,3,6,4,5].

Example 3:

Input: nums = [1,1,1,3,5]
Output: 4
Explanation: The 4 quadruplets that satisfy the requirement are:
- (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

Constraints:

统计特殊四元组。

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/count-special-quadruplets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题也属于 X sum 那一类的题。暴力解不难想到,就是用4个指针分别去遍历题目中的 a, b, c, d 四个下标。然而这道题的最优解是 O(n^2)。

题目要我们找的是满足这个公式的四元组,nums[a] + nums[b] + nums[c] == nums[d] 且 a < b < c < d。我们可以把这个等式变成 nums[a] + nums[b] = nums[d] - nums[c],然后用 hashmap 去记录所有 unique 的 nums[d] - nums[c]。

至于具体做法上,需要有一些技巧。这里我们用一个 for 循环去遍历 b 的下标,对于每一个 b 的下标,我们可以找到 c 和 d 的下标的范围(肯定在 b 的右侧)。记录好所有的 nums[d] - nums[c] 之后,因为我们卡的是b的下标,所有此时我们用另一个 for 循环去找 a 的下标并同时找到满足题意的四元组的个数。

时间O(n^2)

空间O(n)

Java实现

 1 class Solution {
 2     public int countQuadruplets(int[] nums) {
 3         int len = nums.length;
 4         int res = 0;
 5         HashMap<Integer, Integer> map = new HashMap<>();
 6         for (int b = len - 3; b >= 1; b--) {
 7             for (int d = b + 2; d < len; d++) {
 8                 map.put(nums[d] - nums[b + 1], map.getOrDefault(nums[d] - nums[b + 1], 0) + 1);
 9             }
10             for (int a = 0; a < b; a++) {
11                 res += map.getOrDefault(nums[a] + nums[b], 0);
12             }
13         }
14         return res;
15     }
16 }

 

two sum题目总结

LeetCode 题目总结

标签:Count,map,quadruplets,1995,nums,int,四元组,下标,Quadruplets
来源: https://www.cnblogs.com/cnoodle/p/16279344.html