您的位置:首页 > 职场人生

leetcode--4Sum

2016-09-09 09:50 232 查看
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d =
target? Find all unique quadruplets in the array which gives the sum of target.

Note: The solution set must not contain duplicate quadruplets.
For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.

A solution set is:
[
[-1,  0, 0, 1],
[-2, -1, 1, 2],
[-2,  0, 0, 2]
]

解法:
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
using namespace std;
class Solution
{
public:
vector<vector<int> > fourSum(vector<int>& nums, int target)
{
int numsSize=nums.size();
sort(nums.begin(),nums.end());
vector<vector<int> >results;
for(int i=0;i<numsSize-3;i++)
{
if(num[i]>target&&nums[i]>=0) break;
if(i>0&&nums[i-1]==nums[i]) continue;

for(int j=i+1;j<numsSize-2;j++)
{
if(num[j]+nums[i]>target&&nums[j]>=0) break;
if(j>i+1&&nums[j]==nums[j-1]) continue;
int k=j+1;
int l=numsSize-1;
while(k<l)
{
if(k>j+1&&nums[k]==nums[k-1])
{
k++;
continue;
}
if(l<numsSize-1&&nums[l]==nums[l+1])
{
l--;
continue;
}
int sum=nums[i]+nums[j]+nums[k]+nums[l];
if(sum>target)
{
l--;
continue;
}
if(sum<target)
{
k++;
continue;
}
vector<int> result;
result.push_back(nums[i]);result.push_back(nums[j]);
result.push_back(nums[k]);result.push_back(nums[l]);
results.push_back(result);
k++;
//cout<<"A result is "<<nums[i]<<" "<<nums[j]<<" "<<nums[k]<<" "<<nums[l]<<endl;
}

}
}
return results;
}
};
int main()
{
//    Solution solution;
//    vector<int>nums;
//    nums.push_back(1);
//    nums.push_back(0);
//    nums.push_back(-1);
//    nums.push_back(0);
//    nums.push_back(-2);
//    nums.push_back(2);
//    vector<vector<int> > results;
//    results=solution.fourSum(nums,0);
//    for(int i=0;i<results.size();i++)
//    {
//        vector<int>result=results[i];
//        printf("%d %d %d %d\n",result[0],result[1],result[2],result[3]);
//    }

Solution solution;
vector<int>nums;
nums.push_back(0);
nums.push_back(0);
nums.push_back(0);
nums.push_back(0);
vector<vector<int> > results;
results=solution.fourSum(nums,0);
for(int i=0;i<results.size();i++)
{
vector<int>result=results[i];
printf("%d %d %d %d\n",result[0],result[1],result[2],result[3]);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题