3Sum
Two pointers问题。留心一个问题,num.size()返回的是无符号数。当其值为1,i==0时,i<num.size()-2本应该不成立退出循环的,但num.size()-2是无符号数,等于(unsigned int)-1,导致循环条件成立
class Solution { public: vector<vector<int> > threeSum(vector<int> &num) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<vector<int>> res; if(num.empty()) return res; sort(num.begin(),num.end()); int i,j,k; vector<int> tmp; int n = num.size(); for(i=0;i<n-2;i++) { if(i>0&&num[i]==num[i-1]) continue; j = i+1; k = num.size()-1; while(j<k) { while(j<k&&j>i+1&&num[j]==num[j-1]) j++; while(j<k&&k<n-1&&num[k]==num[k+1]) k--; if(j>=k) break; if(num[i]+num[j]+num[k]==0) { tmp.clear(); tmp.push_back(num[i]); tmp.push_back(num[j]); tmp.push_back(num[k]); res.push_back(tmp); j++; k--; }else if(num[i]+num[j]+num[k]>0) k--; else j++; } } return res; }