此题不难,主要涉及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;
}
};
网友评论