K-diff Pairs in an Array

Given an array of integers and an integerk, you need to find the number ofuniquek-diff pairs in the array. Here ak-diffpair is defined as an integer pair (i, j), whereiandjare both numbers in the array and theirabsolute differenceisk.

Example 1:

Input:
 [3, 1, 4, 1, 5], k = 2

Output:
 2

Explanation: 
There are two 2-diff pairs in the array, (1, 3) and (3, 5).


Although we have two 1s in the input, we should only return the number of 
unique
 pairs.

Example 2:

Input:
[1, 2, 3, 4, 5], k = 1

Output: 
4

Explanation:
 There are four 1-diff pairs in the array, (1, 2), (2, 3), (3, 4) and (4, 5).

Example 3:

Input: 
[1, 3, 1, 5, 4], k = 0

Output: 
1

Explanation:
 There is one 0-diff pair in the array, (1, 1).

Note:

  1. The pairs (i, j) and (j, i) count as the same pair.
  2. The length of the array won't exceed 10,000.
  3. All the integers in the given input belong to the range: [-1e7, 1e7].

Tips:

需要观察题目条件,注意k = 0的情况。因为k可能为0,并且nums里可能有重复的数字,所以必须用map记录每个数字的出现次数。

Code:

public class Solution {
    public int findPairs(int[] nums, int k) {
        if (k < 0) return 0;
        Map<Integer, Integer> map = new HashMap<>();
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        int count = 0;
        for (int num : map.keySet()) {
            if (k ==0) {
                if (map.get(num) >= 2) count++;
            } else {
                if (map.containsKey(num + k)) count++;
            }
        }
        return count;
    }
}

results matching ""

    No results matching ""