题目
给你一个整数数组 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]
输入:nums = [1,3], k = 3
输出:0
解释:没有任何数对差的绝对值为 3 。
输入:nums = [3,2,1,5,4], k = 2
输出:3
解释:差的绝对值为 2 的数对为:
- [3,2,1,5,4]
- [3,2,1,5,4]
- [3,2,1,5,4]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-number-of-pairs-with-absolute-difference-k
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1:暴力遍历
Java实现
class Solution {
public int countKDifference(int[] nums, int k) {
int n = nums.length;
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (Math.abs(nums[i] - nums[j]) == k) ans++;
}
}
return ans;
}
}
方法2:哈希表
与两数之和相似
class Solution {
public int countKDifference(int[] nums, int k) {
int n = nums.length;
Map<Integer, Integer> map = new HashMap<>();
int ans = 0;
for (int i = 0; i < n; i++) {
int a = nums[i];
int b = a - k;
int c = a + k;
if (map.containsKey(b)) ans += map.get(b);
if (map.containsKey(c)) ans += map.get(c);
map.put(a, map.getOrDefault(a, 0) + 1);
}
return ans;
}
}
方法3:数组
确定第一个数去找第二个数