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

3Sum

时间:2014-12-04 00:38:06      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   io   ar   color   os   sp   for   

Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note:

  • Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
  • The solution set must not contain duplicate triplets.

 

    For example, given array S = {-1 0 1 2 -1 -4},

    A solution set is:
    (-1, 0, 1)
    (-1, -1, 2)
class Solution {
public:
    vector<vector<int> > threeSum(vector<int> &num) {
        vector<vector<int> > ans;
        if(num.size() < 3) return ans;
        sort(num.begin(), num.end());
        int pos = 0;
        while(num[pos]<0){pos++;}
        int zeroind = 0;
        while(num[pos+zeroind] == 0) zeroind++;
        if(zeroind >= 3) {
            vector<int> tmp;
            tmp.push_back(0);
            tmp.push_back(0);
            tmp.push_back(0);
            ans.push_back(tmp);
        }
        int i=0;
        int j=pos;
        while(i<pos){
            j=pos;
            while(j<num.size()){
                int c = 0 - (num[i] + num[j]);
                if(c < 0 && c >= num[i]){
                    for(int k=i+1; k<pos; k++){
                        if(num[k] == c){
                            vector<int> tmp;
                            tmp.push_back(num[i]);
                            tmp.push_back(c);
                            tmp.push_back(num[j]);
                            ans.push_back(tmp);
                            break;
                        }
                    }
                }
                if(c>=0 && c>=num[j]){
                    for(int k=j+1; k<num.size(); k++){
                        if(num[k] == c){
                            vector<int> tmp;
                            tmp.push_back(num[i]);
                            tmp.push_back(num[j]);
                            tmp.push_back(c);

                            ans.push_back(tmp);
                            break;
                        }
                    }
                }
                while(num[j] == num[j+1]) j++;
                j++;
            }
            while(num[i] == num[i+1]) i++;
            i++;
        }
        return ans;
    }
};

 

3Sum

标签:des   style   blog   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/code-swan/p/4141308.html

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