LeetCode 18. 4Sum

来源:互联网 发布:手机淘宝5.6.9版本 编辑:程序博客网 时间:2024/06/07 18:20

题目链接:

https://leetcode.com/problems/4sum/description/

题解:

在这之前,我们已经解决过了3Sum这个问题,那么,4Sum其实就是在3Sum的基础上,多加了一个。因此,我们可以这么去做,原本对于3Sum,我们只是先确定了一个,那么,我们可以先确定两个。其他地方的处理方法跟3Sum没什么区别。

代码:

class Solution {public:    vector<vector<int>> fourSum(vector<int>& nums, int target) {        set<vector<int> >res;        sort(nums.begin(),nums.end());        for(int i=0;i<nums.size();i++)        {            for(int j=i+1;j<nums.size();j++)            {                int left=j+1,right=nums.size()-1;                int x=nums[i]+nums[j];                while(left<right)                {                    int y=nums[left]+nums[right];                    if(x+y==target)                    {                        res.insert({nums[i],nums[j],nums[left],nums[right]});                        while(left<right&&nums[left]==nums[left+1])                            left++;                        while(left<right&&nums[right]==nums[right-1])                            right--;                        left++;                        right--;                    }                    else if(x+y>target)                        right--;                    else                        left++;                }            }        }        return  vector<vector<int> >(res.begin(),res.end());    }};
原创粉丝点击