1. 程式人生 > >[LeetCode] K-diff Pairs in an Array

[LeetCode] K-diff Pairs in an Array

sam ould numbers put abs 指針 post uno and

Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pair (i, j), where i and j are both numbers in the array and their absolute difference is k.

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].

找出數組中元素差值為k的元素對的數量。要求元素對不重復。

思路:首先對數組進行排序,才能利用差為k這個條件順序遍歷,然後使用兩個指針對數組遍歷。類似於選擇排序 ,將差值為k的兩個元素的和放入set中。最後遍歷結束返回set的大小即可。

之所以使用set是因為題目要求元素對不可以重復。

成功Accept但是Runtime感人。

class Solution {
public
: int findPairs(vector<int>& nums, int k) { if (nums.empty()) return 0; unordered_set<int> s; sort(nums.begin(), nums.end()); for (int i = 0; i < nums.size() - 1; i++) { for (int j = i + 1; j < nums.size(); j++) { if (nums[j] - nums[i] == k) s.emplace(nums[j] + nums[i]); } } return s.size(); } }; // 813 ms

[LeetCode] K-diff Pairs in an Array