LeetCode 2006. Count Number of Pairs With Absolute Difference K
LeetCode 2006. Count Number of Pairs With Absolute Difference K (差的绝对值为 K 的数对数目)
题目
链接
https://leetcode-cn.com/problems/count-number-of-pairs-with-absolute-difference-k/
问题描述
给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。
|x| 的值定义为:
如果 x >= 0 ,那么值为 x 。
如果 x < 0 ,那么值为 -x 。
示例
输入:nums = [1,2,2,1], k = 1
输出:4
解释:差的绝对值为 1 的数对为:
- [1,2,2,1]
- [1,2,2,1]
- [1,2,2,1]
- [1,2,2,1]
提示
1 <= nums.length <= 200
1 <= nums[i] <= 100
1 <= k <= 99
思路
首先思路就是双重循环,可以解决问题。
再思考一下,差为绝对值,那只有两种情况,另一个数为num+k或者num-k,用数组存储,遍历两次即可。
ij有严格单调的关系,如果用哈希表存储,对于每个数,只考虑之前的数,那就遍历一次即可。
- 之前存在num+k,ans增加数量
- 之前存在num-k,ans增加数量
- 每个数都要更新一下hashmap,前面是数值,后面是个数。
复杂度分析
时间复杂度 O(n)
空间复杂度 O(n)
代码
Java
public int countKDifference(int[] nums, int k) {
int ans = 0;
HashMap<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
if(map.containsKey(num+k)){
ans += map.get(num + k);
}
if(map.containsKey(num-k)){
ans += map.get(num - k);
}
map.put(num, map.getOrDefault(num,0) + 1);
}
return ans;
}