ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[LeetCode] 1995. Count Special Quadruplets

2022-05-17 03:00:07  阅读:267  来源: 互联网

标签:Count map quadruplets 1995 nums int 四元组 下标 Quadruplets


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

  • nums[a] + nums[b] + nums[c] == nums[d], and
  • a < b < c < d

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:

  • 4 <= nums.length <= 50
  • 1 <= nums[i] <= 100

统计特殊四元组。

给你一个 下标从 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有