您的当前位置:首页正文

532. K-diff Pairs in an Array

来源:华拓网

此题不难,主要涉及C++中vector数组去重操作。

  • unique函数是一个去重函数,去除相邻中的重复元素(只留一个)。
    其中,关键的是:去除并不是把重复的元素删除,而是全部放到数组的最后。

为了去除重复的元素,首先应该对数组vector进行排序,这样保证重复元素在相邻的位置。

  • unique函数,返回的是去重后的尾地址。
    因此对于一个内容为{2, 2, 5, 5, 6}的vector,执行unique函数以后,vector大小并没有改变,只不过顺序变成了{2, 5, 6, 2, 5},并且函数的返回值为3。此时需要删除重复元素,只需要将后面的数据全部删除即可。
class Solution {
public:
    int findPairs(vector<int>& nums, int k) {
        if(nums.size()==0)
            return 0;
        sort(nums.begin(), nums.end());
        int cnt=0;
        if(k==0){
            
            for(int i=0;i<nums.size()-1;i++){
                if(nums[i]==nums[i+1]){
                    while((i+1)<nums.size() && nums[i]==nums[i+1]){
                        i++;
                    }
                    cnt++;
                }
            }
            return cnt;
            
        }
        
        nums.erase(unique(nums.begin(), nums.end()), nums.end());
        int n=nums.size();
        cnt=0;
        for(int i=0;i<n-1;i++){
            for(int j=i+1;j<n;j++){
                int tmp = abs(nums[j]-nums[i]);
                if(tmp==k)
                    cnt++;
            }
        }
        return cnt;
    }
};