leetcode - 4Sum

来源:互联网 发布:java 去除 转义字符 编辑:程序博客网 时间:2024/06/16 18:55

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:    std::vector<std::vector<int> > fourSum(std::vector<int> &num, int target)     {        std::vector<std::vector<int>> resultSet;        int n = num.size();        if (n < 4)        {            return resultSet;        }        sort(num.begin(), num.end());        std::vector<int> result(4);        for (int dIndex = n - 1; dIndex >= 3; dIndex--)        {            if ((dIndex < (n - 1)) && (num[dIndex + 1] == num[dIndex]))            {                continue;            }            result[3] = num[dIndex];            for (int cIndex = dIndex - 1; cIndex >= 2; cIndex--)            {                if ((cIndex < (dIndex - 1)) && (num[cIndex + 1] == num[cIndex]))                {                    continue;                }                int threeSum = target - num[dIndex] - num[cIndex];                result[2] = num[cIndex];                int start = 0;                int end = cIndex - 1;                while (start < end)                {                    int curSum = num[start] + num[end];                    if (curSum == threeSum)                    {                        result[0] = num[start];                        result[1] = num[end];                        resultSet.push_back(result);                        do                        {                            start++;                            end--;                        } while (start < end && num[start] == num[start - 1] && num[end] == num[end + 1]);                    }                    else if (curSum > threeSum)                    {                        end--;                    }                    else                    {                        start++;                    }                }            }        }        return resultSet;    }};


0 0
原创粉丝点击