Welcome to Subscribe On Youtube
532. K-diff Pairs in an Array
Description
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.length
i != j
|nums[i] - nums[j]| == k
Notice that |val|
denotes the absolute value of val
.
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).
Constraints:
1 <= nums.length <= 104
-107 <= nums[i] <= 107
0 <= k <= 107
Solutions
-
class Solution { public int findPairs(int[] nums, int k) { Set<Integer> vis = new HashSet<>(); Set<Integer> ans = new HashSet<>(); for (int v : nums) { if (vis.contains(v - k)) { ans.add(v - k); } if (vis.contains(v + k)) { ans.add(v); } vis.add(v); } return ans.size(); } }
-
class Solution { public: int findPairs(vector<int>& nums, int k) { unordered_set<int> vis; unordered_set<int> ans; for (int& v : nums) { if (vis.count(v - k)) ans.insert(v - k); if (vis.count(v + k)) ans.insert(v); vis.insert(v); } return ans.size(); } };
-
class Solution: def findPairs(self, nums: List[int], k: int) -> int: vis, ans = set(), set() for v in nums: if v - k in vis: ans.add(v - k) if v + k in vis: ans.add(v) vis.add(v) return len(ans)
-
func findPairs(nums []int, k int) int { vis := map[int]bool{} ans := map[int]bool{} for _, v := range nums { if vis[v-k] { ans[v-k] = true } if vis[v+k] { ans[v] = true } vis[v] = true } return len(ans) }
-
impl Solution { pub fn find_pairs(mut nums: Vec<i32>, k: i32) -> i32 { nums.sort(); let n = nums.len(); let mut res = 0; let mut left = 0; let mut right = 1; while right < n { let num = i32::abs(nums[left] - nums[right]); if num == k { res += 1; } if num <= k { right += 1; while right < n && nums[right - 1] == nums[right] { right += 1; } } else { left += 1; while left < right && nums[left - 1] == nums[left] { left += 1; } if left == right { right += 1; } } } res } }