https://oj.leetcode.com/problems/3sum/
在一个数列中,求出所有3个数之和是0的3个数。
刚开始给自己挖了坑,由于没闹清,unique()函数的含义,去掉重复不彻底,所以一直 output limit Exceeded.
于是,想新的判断是否重复的方法,这样跳过了一部分之后,再只判断是否,要加入的数据和上一个加入的数据是否相同,就可以了。
if(i>0 && num[i] == num[i-1]) continue;
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 k = 0; for(int i = 0;i<num.size()-2;i++) { if(i>0 && num[i] == num[i-1]) continue; int j = i+1; if(num[i]+num[j]>0) continue; k = num.size()-1; while(j<k) { if(num[i]+num[j]+num[k] == 0) { if(ans.size()==0 || ans.size()>0 && !(num[i]==ans[ans.size()-1][0]&& num[j] ==ans[ans.size()-1][1] )) { vector<int> ansPiece; ansPiece.push_back(num[i]); ansPiece.push_back(num[j]); ansPiece.push_back(num[k]); //remove duplicated /*bool flag = true; for(vector<vector<int> >::iterator it = ans.begin(); it != ans.end(); it++) { if((*it)[0] == ansPiece[0] && (*it)[1] == ansPiece[1] && (*it)[2] == ansPiece[2]) { flag = false; break; } } if(flag) ans.push_back(ansPiece);*/ ans.push_back(ansPiece); } } if(num[i]+num[j]+num[k] < 0) j++; else k--; } } return ans; } };