把数组排个序,对于每一个nums[i],都查找一下nums[i]+k是否存在在数组中;如果存在则将这个数对中较小的数字插入到一个哈希表中。最后哈希表中元素的个数就是答案的值。代码还是有挺多细节的
代码class Solution {
public:
int findPairs(vector& nums, int k) {
unordered_set st;
sort(nums.begin(), nums.end());
int i, j;
i = j = 0;
while(j < nums.size()) {
while(nums[j]-nums[i] > k) {
++i;
}
if(nums[j]-nums[i] == k) {
if(i != j) {
st.insert(nums[i]);
++i;
} else {
++j;
}
}
while(j < nums.size() && nums[j]-nums[i]
++j;
}
}
return st.size();
}
};
结果


![Leetcode 532. 数组中的 k-diff 数对 [哈希表+双指针] Leetcode 532. 数组中的 k-diff 数对 [哈希表+双指针]](http://www.mshxw.com/aiimages/31/976635.png)
