码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 18. 4Sum

时间:2018-08-09 23:16:50      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:cto   return   size   开始   暴力   一个   tco   clear   solution   

难点在于不能有重复。

开始的思路是先两两求和,然后对得到的新序列求2Sum,但是很难排重。本想利用set<set<int>>排重,结果因为stl内部实现机制,应该是做不到。

可行的思路是,外层暴力fix前两个数,内层一个循环固定后两个数。还是注意排重。

 

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& n, int target) {
        vector<vector<int>> ans;
        int l,r,len=n.size();
        vector<int> temp;
        sort(n.begin(),n.end());
        for(int i=0;i<len-3/*&&n[i]*4<=target*/;){
            for(int j=i+1;j<len-2;){
                l=j+1;r=len-1;
                while(l<r){
                    if(n[i]+n[j]+n[l]+n[r]>target) r--;
                    else if(n[i]+n[j]+n[l]+n[r]<target) l++;
                    else {
                        temp.push_back(n[i]);
                        temp.push_back(n[j]);
                        temp.push_back(n[l]);
                        temp.push_back(n[r]);
                        ans.push_back(temp);
                        temp.clear();
                        l++;
                        while(n[l]==n[l-1]) l++;
                    }
                }//else
                j++;
                while(n[j]==n[j-1]) j++;
            }//for j
            i++;
            while(n[i]==n[i-1]) i++;
        }//for i
        return ans;
    }
};

 

LeetCode 18. 4Sum

标签:cto   return   size   开始   暴力   一个   tco   clear   solution   

原文地址:https://www.cnblogs.com/travelller/p/9452172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!