具体思想:
暴露了自己滑动窗口不太熟练的问题,双值有序不应该被卡住;
具体代码:
官方解法:
class Solution {
public:
int findPairs(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
int ret=0;
for(int i=0,j=0;i<nums.size();i++){
if(i>0&&nums[i]==nums[i-1])
continue;
while(j<=i)
j++;
while(j<nums.size()&&nums[j]-nums[i]<k)
j++;
if(j<nums.size()&&nums[j]-nums[i]==k){
ret++;
}
}
return ret;
}
};
自己版本:
class Solution {
public:
int findPairs(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
int ret=0;
int l=0,r=0;
while(r<nums.size()){
if(r<=l||nums[r]-nums[l]<k){
r++;
continue;
}
if(nums[r]-nums[l]==k){
ret++;
while(r+1<nums.size()&&nums[r]==nums[r+1])
r++;
r++;
continue;
}
while(l<=r&&nums[r]-nums[l]>k)
l++;
}
return ret;
}
};