leetcode:3Sum

求一個隊列中三個之和爲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;
    }
};



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章