题目 https://leetcode.com/problems/k-diff-pairs-in-an-array/#/description
代码
class Solution {
public:
int findPairs(vector<int>& nums, int k) {
if(k < 0)
return 0;
unordered_map<int,int> m;
for(int i = 0; i < nums.size(); ++i)
{
++m[nums[i]];
}
int res = 0;
if(k != 0) {
for(auto it = m.begin(); it != m.end(); ++it){
cout<< it->first <<endl;
if(m.find(it->first+k) != m.end())//将map中的键值添加k,看能否寻找到对应的键值,如果能找到说明新增一pair
++res;
}
} else {
for(auto it = m.begin(); it != m.end(); ++it)
if(it->second > 1)
++res;
}
return res;
}
};
解题:
1 根据题意,开始应将数组的重复数据“去掉”
2 利用unordered_map 储存不同数字以及出现的次数,实现1
3 unordered_map的键值加上k后的结果所表示的key在unordered_map中有对应value则表明输入数组中有1对满足绝对值为k的“组合”,以此类推计算出所有的“组合”数即为题目的解。
4 若k为0时则统计unordered_map 中key所对应的value(即key在数组中出现的次数)大于1的所有key的数量,即为题目的解。