4 Sum -Leetcode

来源:互联网 发布:网络环境被劫持 编辑:程序博客网 时间:2024/05/29 19:40

题意:

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的做法。这里是先依次固定一个数字,然后按照3Sum的做法来做。

class Solution {public:    vector<vector<int>> fourSum(vector<int>& nums, int target) {        vector<int> num(nums);        sort(num.begin(),num.end());        vector<vector<int> > result;        set<vector<int> > res;        if(num.size()<4) return result;        //先固定数组中的一个数字,注意数字的范围是[0,num.size()-3),因为这里要以一个固定的数字为基础随后进行3Sum的操作。        for(int i=0;i<num.size()-3;i++)        {            if(i&&num[i]==num[i-1]) continue;            //在固定数字之后的范围里进行3Sum的操作            for(int j=i+1;j<num.size()-2;j++)            {                if(j>i+1&&num[j]==num[j-1]) continue;                int p=j+1;                int q=num.size()-1;                while(p<q)                {                    int n=num[i]+num[j]+num[p]+num[q];                    if(n==target)                    {                        vector<int> vec{num[i],num[j],num[p],num[q]};                        sort(vec.begin(),vec.end());                        res.insert(vec);                        p++;                        q--;                    }                    else if(n<target) p++;                    else q--;                }            }        }        result=vector<vector<int> >(res.begin(),res.end());        return result;    }};
0 0
原创粉丝点击