leetcode:3Sum

来源:互联网 发布:物流单号查询软件 编辑:程序博客网 时间:2024/06/12 22:13

求一个队列中三个之和为0的子列,并以非递减的顺序输出。思路如下:

step1: 枚举每个num[i],i=0--n;

step2:设置j=i+1,k=n-1;依次判断num[i]+num[j]+num[k]=0?并根据其和与0的大小关系对j和k做调整;

step3:为避免重复,必须对每个num[i],num[j],num[k]做判断,看它们是否与其前面的整数相等,若相等则直接跳过。

具体代码如下:

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



0 0