LeetCode 18. 4Sum

来源:互联网 发布:淘宝分期付款额度 编辑:程序博客网 时间:2024/06/05 09:32

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

本题与前面153 SUM可以说几乎没有太多区别,尽管多了一个数,但思路完全一样,对于数组中每个数num[i],相当于求3 sum 的结果为target- num[i]。因此可以用几乎一样的方法进行求解。

class Solution {public:    vector<vector<int>> fourSum(vector<int>& nums, int target) {        vector<vector<int>> res;        if(nums.size()<4)            return res;        sort(nums.begin(),nums.end());        for(int i=0;i<nums.size()-3;i++){            int t=target-nums[i];            for(int j=i+1;j<nums.size();j++){                int a=j+1,b=nums.size()-1;                while(a<b){                    int sum=nums[j]+nums[a]+nums[b];                    if(sum==t){                        vector<int> d(4,0);                        d[0]=nums[i];                        d[1]=nums[j];                        d[2]=nums[a];                        d[3]=nums[b];                        res.push_back(d);                        while(a<b&&nums[b]==d[3])                            b--;                        while(a<b&&nums[a]==d[2])                            a++;                    }                    else if(sum<t)                        a++;                    else                        b--;                }                while(j<nums.size()-1&&nums[j+1]==nums[j])                    j++;            }            while(i<nums.size()-1&&nums[i+1]==nums[i])                i++;        }        return res;    }};


原创粉丝点击