问题链接
532. 数组中的 k-diff 数对
问题描述
给定一个整数数组和一个整数 k
,你需要在数组里找到 不同的 k-diff
数对,并返回不同的 k-diff
数对 的数目。
这里将k-diff
数对定义为一个整数对(nums[i], nums[j])
,并满足下述全部条件:
- 0 <= i < j < nums.length
- |nums[i] - nums[j]| == k
- 注意,|val| 表示 val 的绝对值。
示例
输入:nums = [3, 1, 4, 1, 5], k = 2
输出:2
解释:数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。
尽管数组中有两个1,但我们只应返回不同的数对的数量。
解题思路
这题很简单,排序后两重循环直接冲就行了,但要注意的是:
找到不同的数对,这并不意味着我们能直接去重,万一k=0
,需要2个相同的数组成数对。
代码示例(JAVA)
class Solution {
public int findPairs(int[] nums, int k) {
Arrays.sort(nums);
int lastI = Integer.MIN_VALUE;
int count = 0;
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] == lastI) {
continue;
}
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] - nums[i] == k) {
count++;
lastI = nums[i];
break;
} else if (nums[j] - nums[i] > k) {
break;
}
}
}
return count;
}
}
执行结果
![](https://img.haomeiwen.com/i13447148/d52e4d47ce7d1c31.png)
网友评论