您的位置:首页 > 其它

LeetCode-18-4Sum(证明/KSum)-Medium

2015-12-27 15:31 357 查看
题意理解:

在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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: