今日中等题:https://leetcode.cn/problems/k-diff-pairs-in-an-array/
今天的题目,开始就想到了2种比较常见的思路:
- 通过Hashset去重,找到符合差值为k的数组中大的那个存入,返回Hashset的长度;
- 通过双指针,排序nums后,遍历一遍数组,同时去找对应的nums[i]+k,找到了ans++;
看过题解后还有第三种思路,就是二分法这题我不太喜欢这种解法,不想看hhh;
贴下代码:
class Solution {
public int findPairs(int[] nums, int k) {
Arrays.sort(nums);
int ans = 0;
int tail = 1;
for (int i = 0; i< nums.length - 1; i++) {
// 重复数字跳过
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
while ((nums[tail] - nums[i] < k && tail < nums.length - 1) || i >= tail) {
tail++;
}
if (nums[tail] - nums[i] == k) {
ans++;
}
}
return ans;
}
}
网友评论