18. 4Sum

来源:互联网 发布:windows10固态硬盘优化 编辑:程序博客网 时间:2024/06/06 21:40

一、问题

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]]

二、解题

class Solution {public:    vector<vector<int> > fourSum(vector<int> &num, int target) {        vector<vector<int>> out;        set<vector<int>> res;        if (num.size() < 4)            return out;        sort(num.begin(), num.end());        for (int i = 0; i<num.size() - 3; i++)        {            for (int j = i + 1; j<num.size() - 2; j++)            {                int begin = j + 1;                int end = num.size() - 1;                while (begin < end) {                    int sum = num[i] + num[j] + num[begin] + num[end];                    if (sum == target)                    {                        vector<int> tmp;                        tmp.push_back(num[i]);                        tmp.push_back(num[j]);                        tmp.push_back(num[begin]);                        tmp.push_back(num[end]);                        res.insert(tmp);                        begin++;                        end--;                    }                    else if (sum < target)                    {                        begin++;                    }                    else {                        end--;                    }                }            }        }        set<vector<int>>::iterator it = res.begin();        for (; it != res.end(); it++)            out.push_back(*it);        return out ;    }};
原创粉丝点击