No.532 数组中的 k-diff 数对

532. 数组中的 k-diff 数对 - 力扣(LeetCode) (leetcode-cn.com)

这道题做的很别扭,思路有点转不过来。

思路大致是,在找相差为k的数字对时,遍历过程中为避免重复,总是用每个数减去k,判断nums[i] - k是否存在于nums[]数组中。

                    于是先给数组nums[]进行排序,

public int findPairs(int[] nums, int k) {
        //先对数组排序,用HashMap存放合题意的键值对(用了HashMap就不要刻意去重),
        //用一个HashSet存放已经遍历过的数字
        int ans = 0;
        Arrays.sort(nums);
        HashMap<Integer, Integer> hashmap = new HashMap<>();
        HashSet<Integer> numSet =  new HashSet<>();
      
//先将nums[]整个存入numSet散列表其实也是一样效果 ,这里只是在加入Set集合的过程中,加了一步判断当前数字nums[i]是否有nums[i]-k和其组成键值对
//反正最后有HashMap兜底,不会出现重复计算的情况 for(int i=0; i<nums.length; i++){ int tmp = nums[i] - k; if(numSet.contains(tmp)){ hashmap.put(nums[i], tmp); } numSet.add(nums[i]); } ans = hashmap.keySet().size(); return ans; }

 

上一篇:leetcode03——无重复字符的最长子串


下一篇:【Java】对两个Set取交集,差集,并集