题意理解:
在vector中找出所有的a,b,c,d,其中a<b<c<d,要求a+b+c+d=target。并且,不能有重复的abcd组合;
解题思路:
同15-3Sum
解题代码:
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
int size=nums.size();
vector<vector<int>> ans;
if(size<4){
return ans;
}
sort(nums.begin(), nums.end());
int left, right;
int a, b, c, d;
for(int i=0;i<size-3;i++){
if(i==0){
a=nums[i];
}else{
if(nums[i]==a){
continue;
}else{
a=nums[i];
}
}
//cout<<"a= "<<a<<endl;
for(int j=i+1;j<size-2;j++){
if(j==i+1){
b=nums[j];
}else{
if(nums[j]==b){
continue;
}else{
b=nums[j];
}
}
//cout<<"b= "<<b<<endl;
left=j+1;
right=size-1;
int preL, preR;
bool isPreLRInit=false;
while(left<right){
int sum=a+b+nums[left]+nums[right];
if(sum>target){
right--;
}else if(sum<target){
left++;
}else{
if(!isPreLRInit){
isPreLRInit=true;
}else{
if(preL==nums[left]){
left++;
continue;
}
if(preR==nums[right]){
right--;
continue;
}
}
c=nums[left];
d=nums[right];
//cout<<"a b c d= "<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
vector<int> t={a, b, c, d};
ans.push_back(t);
preL=nums[left];
preR=nums[right];
left++;
right--;
}
}
}
}
return ans;
}
};