4sum

来源:互联网 发布:拖动拼图验证码js插件 编辑:程序博客网 时间:2024/06/01 08:16

题目:

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:
Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
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)

程序:

class Solution {public:    vector<vector<int> > fourSum(vector<int> &num, int target) {         int len = num.size();            vector<vector<int>> res;            if(len<4) return res;            sort(num.begin(),num.end());            for(int i=0;i<len;i++)            {                int threeSum = target-num[i];                for(int j=i+1;j<len;j++)                {                    int twoSum = threeSum-num[j];                    int left=j+1,right=len-1;                    while(left<right)                    {                        int curSum = num[left]+num[right];                        if(curSum < twoSum)                            left++;;                        else if(curSum > twoSum)                            right--;                        else                        {                            vector<int> temp={num[i],num[j],num[left],num[right]};                            res.push_back(temp);                            while(left<right && num[left]== temp[2])                                ++left;                            while(left<right && num[right]==temp[3])                                --right;                        }                    }                    while(j<len-1 && num[j] == num[j+1])                        ++j;                }                while(i<len-1 && num[i]==num[i+1])                      ++i;            }            return res;             }};