欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

532. K-diff Pairs in an Array

程序员文章站 2022-03-07 19:05:19
...

1,题目要求
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.
532. K-diff Pairs in an Array
找到这样的整数对(i,j),其中i和j都是数组中的数字,它们的绝对差值是k,其中,不计算重复的对。

2,题目思路
一开始,个人的想法是先进行排序,然后再进行遍历,并利用flag来减少每一次的搜索次数。但是这样做下来,发现并不能解决重复的整数对的问题。
对于去除重复出现的数字问题,用自带检查重复的容器是比较好的解决方案,这样的容器即set和map。
对于这个问题,对于满足给定条件的一个整数对,就将这个整数对的较小的数字保存在set中,这样就可以在出现重复的pair时,可以去除重复。

3,程序源码

class Solution {
public:
    int findPairs(vector<int>& nums, int k) {
        if(k<0) return 0;
        unordered_map<int, int> m;
        unordered_set<int> s;   //保存可以配对成功的较小的数字,用来对重复进行验证

        auto n = nums.size();
        for(int i = 0;i<n;i++)
        {
            if(m.count(nums[i]-k)!=0)
                s.insert(nums[i]-k);
            if(m.count(nums[i]+k)!=0)
                s.insert(nums[i]);
            m[nums[i]]++;
        }
        return (int)s.size();
}  
};