K-Diff Pairs in an Array
LeetCode October - Day 3
Problem Statement
Given an array of integers nums and an integer k, return the number of unique k-diff pairs in the array.
A k-diff pair is an integer pair (nums[i], nums[j]), where the following are true:
0 <= i, j < nums.lengthi != ja <= bb - a == k
Example 1:
Input: nums = [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: nums = [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: nums = [1,3,1,5,4], k = 0
Output: 1
Explanation: There is one 0-diff pair in the array, (1, 1). Example 4:
Input: nums = [1,2,4,4,3,3,0,9,2,3], k = 3
Output: 2
Example 5:
Input: nums = [-1,-2,-3], k = 1
Output: 2
Constraints:
- 1 <= nums.length <= $10^4$
- $-10^7$ <= nums[i] <= $10^7$
- 0 <= k <= $10^7$
Inputs, Outputs, Constraints & Exceptions
- I: - number[] {nums}
- number {k}
- O: number
- C: None other than the above
- E: - nums.length is 1
- k is 0
- num is filled with same number e.g.
[1, 1, 1, 1]
Code (two nested loops)
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
function findPairs(nums, k) {
nums.sort((a, b) => a - b)
const store = new Map()
for(let i = 0; i < nums.length - 1; i++){
for(let j = i+1; j < nums.length; j++){
const diff = nums[i] - nums[j]
if(Math.abs(diff) === k){
store.set(nums[i], nums[j])
}
}
}
return store.size
};
Time complexity: O($N^2$)
Space complexity: O($N$)
- Our the number of pairs HashMap stores increases linearly with N.
Code (hashmap and looping twice)
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
function findPairs(nums, k) {
// create hashMap of nums -> freq
const hm = new Map();
for(let n of nums){
hm.set(n, (hm.get(n) || 0) + 1)
}
// See if nums[i] + k in hashMap
let count = 0;
for(let [num, freq] of hm.entries()){
if(k === 0){
if(freq > 1) count++;
} else {
if(hm.has(num + k)) count++;
}
}
return count
};
Time complexity: O(N)
Space complexity: O(N)