4Sum

来源:互联网 发布:mac口红日本买便宜多少 编辑:程序博客网 时间:2024/06/07 18:20

Given an array S of n integers, are there elements abc, 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) {        vector<vector<int>> ret;        int len = num.size();        if (len <4) return ret;        sort(num.begin(),num.end());        for (int i=0; i<len;++i ){            for (int j=i+1; j<len; ++j) {                int first = j+1;                int last = len-1;                                while(first<last){                    int sum = num[i]+num[j]+num[first]+num[last];                    if (sum==target){                        vector<int> vec;                        vec.push_back(num[i]);                        vec.push_back(num[j]);                        vec.push_back(num[first]);                        vec.push_back(num[last]);                        ret.push_back(vec);                        vec.clear();                        while(first<len-1 && num[first+1]==num[first]){                            first++;                        }                        first++;                        last--;                    } else if(sum<target)  {                        first++;                    } else {                        last--;                    }                }                while (j<len-1 && num[j]==num[j+1]){                    j++;                }            }            while (i<len-1 && num[i]==num[i+1]){                    i++;            }        }        return ret;    }};
0 0
原创粉丝点击