LeetCode-15 3sum

来源:互联网 发布:如何查询淘宝会员等级 编辑:程序博客网 时间:2024/05/29 09:07

题目:给定一个数组,在数组中寻找所有相加等于0的三个数,三个数输出顺序为升序。

思路:首先将数组排序,然后依次固定每个值a[i],在a[i+1]到a[n-1]寻找两个数之和等于-a[i]。注意当下一迭代a[i+1]=a[i]时,则跳过a[i+1]。

class Solution {    private:        vector<vector<int> > result;        int flag=1;public:    vector<vector<int> > threeSum(vector<int> &num){        result.clear();        int length1=num.size();        sort(num.begin(),num.end());                for(int i=0;i<length1;i++){            if(i>0&&num[i]==num[i-1]){                continue;            }            int j,k;            j=i+1;            k=length1-1;            while(j<k){                                if(j>i+1&&num[j]==num[j-1]){                       j++;                      continue;                  }                                  if(k<length1-1&&num[k]==num[k+1]){                    k--;                    continue;                }               int sum=num[i]+num[j]+num[k];               if(sum>0){                   k--;               }               else if(sum<0){                   j++;               }               else{                   vector<int> a;                   a.push_back(num[i]);                   a.push_back(num[j]);                   a.push_back(num[k]);                   result.push_back(a);                   j++;               }            }        }        return result;    }};


0 0
原创粉丝点击