首页 > 代码库 > [leetcode] 4Sum

[leetcode] 4Sum

4Sum

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)

思路:

与3Sum 一样,只是多了一个数字,所以多了一层循环。

题解:

技术分享
class Solution {public:    vector<vector<int> > fourSum(vector<int> &num, int target) {        vector<vector<int> > res;        vector<int> tmp;        sort(num.begin(), num.end());        for(int i=0;i<num.size();i++) {            while(i>0 && num[i]==num[i-1])                i++;            for(int j=i+1;j<num.size();j++) {                while(j>i+1 && num[j]==num[j-1])                    j++;                int l = j+1;                int r = num.size()-1;                while(l<r) {                    while(l>j+1 && num[l]==num[l-1])                        l++;                    while(r<num.size()-1 && num[r]==num[r+1])                        r--;                    if(l<r) {                        int sum = num[i]+num[j]+num[l]+num[r];                        if(sum>target)                            r--;                        else if(sum<target)                            l++;                        else {                            tmp.clear();                            tmp.push_back(num[i]);                            tmp.push_back(num[j]);                            tmp.push_back(num[l]);                            tmp.push_back(num[r]);                            res.push_back(tmp);                            l++;                        }                    }                }            }        }        return res;    }};
View Code

 

 



[leetcode] 4Sum