4sum

来源:互联网 发布:尼特罗会长知乎 编辑:程序博客网 时间:2024/05/18 01:21

Given an array S of n integers, are there elementsa, 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.


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

四个数求和,其实和三个数相同,只是多了一层循环,注意在开始的两个循环间加入判断是否和上一和数字相同。

0 0
原创粉丝点击