Note:
开两个hash表,一个用来记录答案的数对,一个用来记录访问过的数
其中,以为要求答案的数对是不能重复的,那么记录过程中只需要记录其中的一个端点即可(大的小的都行)
每次遍历的就看做是j
每次位置能构成数对的,就是j - k, j + k
这样只需要去看看访问过的里面有没有这两个数,有则说明可以构成数对,把他存成答案,j+k
一定是数对的右端点,我的代码里把他当做答案,存到答案hash里
如果是j-k
存在了,那么就给答案里插入这种情况的有端点t
代码如下:
class Solution {
public:
int findPairs(vector<int>& nums, int k) {
unordered_set<int> visited, res;
for(auto t : nums){
if(visited.count(t + k))
res.emplace(t + k);
if(visited.count(t - k))
res.emplace(t);
visited.emplace(t);
}
return res.size();
}
};