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;
}
浙公网安备 33010602011771号