题目:
力扣https://leetcode.cn/problems/k-diff-pairs-in-an-array/思路:寻找相差为k的数对 分为两种情况 一种为num+k ,一种为num-k 使用set消除重复数据,使用map来记录数据对,使用size函数返回数量
#include<iostream>
#include<map>
#include<string>
#include<vector>
#include<set>
#include<algorithm>
#include<queue>
#include<unordered_set>
using namespace std;
class Solution {
public:
int findPairs(vector<int>& nums, int k) {
set<int> num;
map<int, int> out;
for (auto number : nums) {
if (num.find(number - k) != num.end())
{
out.insert(pair<int, int>(number - k, number));
}
if (num.find(number + k) != num.end())
{
out.insert(pair<int, int>(number, number + k));
}
num.insert(number);
}
return out.size();
}
};
注意点:在存入map容器的时候 需要将较小的的数据存为关键字,避免出现(1,2)和(2,1)的重复数据,我的题解时间和空间复杂度都挺高,可以使用unordered_set和unordered_map来减少查询的时间等等,优化代码效率。