leetcode18 4Sum

来源:互联网 发布:写作的软件 编辑:程序博客网 时间:2024/06/06 20:16

题意:一个数组中,找出4个数之和为指定target的。

分析:又是一类超经典的数组中找和为某数的组合问题,一般通过定数扫描的方法可以减少一阶复杂度,4个数的话就可以先固定头两个数再扫描,注意解不要重复,按数字来扫不要按位扫就好。

AC:

class Solution {public:    vector<vector<int>> fourSum(vector<int>& nums, int target) {        vector<vector<int>> res;        int s=nums.size();        sort(nums.begin(),nums.end());        int i,j;        for(int m=0;m<s-2;m++)        {            if(m>0&&nums[m]==nums[m-1]) continue;            for(int n=m+1;n<s-1;n++)            {                if(n>m+1&&nums[n]==nums[n-1]) continue;                i=n+1;                j=s-1;                while(i<j)                {                    if(nums[i]+nums[j]+nums[m]+nums[n]>target)                        j--;                    else if(nums[i]+nums[j]+nums[m]+nums[n]<target)                        i++;                    else                    {                        while(nums[i]==nums[i+1] && i<j) i++;                        while(nums[j]==nums[j-1] && i<j) j--;                        res.push_back({nums[m],nums[n],nums[i],nums[j]});                        i++;j--;                    }                }            }        }        return res;    }};


原创粉丝点击