leetcode No18. 4Sum_leetcode

來源:互聯網
上載者:User
Question:

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

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

Algorithm:

先排序,兩層迴圈確定兩個數nums[i],nums[j],然後用兩個指標m,n從i+1往後,nums.size()往前搜尋

注意,遍曆過程中,遇到重複的要往後移 Accepted Code:

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++)        {            if(i>0&&nums[i]==nums[i-1])                continue;            for(int j=i+1;j<nums.size()-2;j++)            {                if(j>(i+1)&&nums[j]==nums[j-1])                    continue;                int m=j+1;                int n=nums.size()-1;                while(m < n)                {                    if(m>(j+2)&&nums[m]==nums[m-1])                    {                        m++;                        continue;                    }                    if(n<(nums.size()-1)&&nums[n]==nums[n+1])                    {                        n--;                        continue;                    }                    int sum=nums[i]+nums[j]+nums[m]+nums[n];                    if(sum==target)                    {                        vector<int> tmp={nums[i],nums[j],nums[m],nums[n]};                        res.push_back(tmp);                        m++;                        n--;                    }                    else if(sum>target)                        n--;                    else                         m++;                }            }        }        return res;    }};


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.