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; }