【LeetCode】3Sum

来源:互联网 发布:人工翻译软件 编辑:程序博客网 时间:2024/06/07 19:48

Given an array S of n integers, are there elements a,b, c 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,abc)
  • 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)

思路:先排序,然后从0到n-1开始遍历,从第i个之后找到两个数和i相加得到0,分别从i+1个元素往后递加,已经从最后一个元素往前找,最终完成搜索。



class Solution {  public:  vector<vector<int> > threeSum(vector<int> &num) {int nsize=num.size(),sum;vector<vector<int> > vvi;vvi.clear();if(nsize<3)return vvi;vector<int> tmp;sort(num.begin(),num.end());int i,j,k=nsize-1;for(i=0;i<nsize-2;i++){if(i > 0 && num[i]==num[i-1])                  continue;  sum=-num[i];j=i+1;k=nsize-1;for(;j<k;){if(j>i+1&&num[j]==num[j-1]){                   j++;                continue;            }              if(k<num.size()-1&& num[k]==num[k+1]){                  k--;                continue;            }  if(num[j]+num[k]>sum)k--;else if(num[j]+num[k]<sum)j++;else {tmp.push_back(num[i]);tmp.push_back(num[j]);tmp.push_back(num[k]);vvi.push_back(tmp);tmp.clear();j++;}}}return vvi;}};  



0 0
原创粉丝点击