返回互不相同的数组。
这里面也是采用双指针的方法,两层循环,后面两个分别加以指针
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
vector<vector<int>> res;
if(nums.size()<4)
return res;
for(int i=0;i<nums.size()-3;i++){
if(i>0&&nums[i]==nums[i-1]){//重复值跳过
continue;
}
for(int j=i+1;j<nums.size()-2;j++){
if(j>i+1&&nums[j]==nums[j-1]){//重复值跳过
continue;
}
int l=j+1;//左指针
int r=nums.size()-1;//右指针
while(l<r){
int sum=nums[i]+nums[j]-target;;
if(sum<-(nums[l]+nums[r])){//避免数值太大导致溢出
l++;
}
else if(sum>-(nums[l]+nums[r])){
r--;
}
else{
res.push_back({nums[i],nums[j],nums[l],nums[r]});
while(l<r&&nums[r]==nums[r-1]){
r--;//重复值跳过
}
while(l<r&&nums[l]==nums[l+1]){
l++;//重复值跳过
}
// l++;
r--;
}
}
}
}
return res;
}
};
这个里面需要记住 res.push_back({nums[i],nums[j],nums[l],nums[r]});
代码块