2022-06-16 「532. 数组中的 k-diff 数对」

今日中等题:https://leetcode.cn/problems/k-diff-pairs-in-an-array/

今天的题目,开始就想到了2种比较常见的思路:

  1. 通过Hashset去重,找到符合差值为k的数组中大的那个存入,返回Hashset的长度;
  2. 通过双指针,排序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;
    }
}

你可能感兴趣的:(2022-06-16 「532. 数组中的 k-diff 数对」)