class Solution { public: vector<vector<int>> threeSum(vector<int>& a) { vector<vector<int>> ans; sort(a.begin(),a.end()); int n = a.size(); //for(int k = 0; k < a.size() -2; k++) for(int k = 0; k < n -2; k++) //问题在这里。a.size()是unsigned,无符号数-2,如果是1-2,会得到一个大数!!! { int i,j; for(i = k + 1, j = n -1; i < j; ) { int sum = a[i] + a[j] + a[k]; if(sum > 0) j--; else if(sum < 0) i++; else{ vector<int> tmp(3); tmp[0] = a[k],tmp[1] = a[i],tmp[2] = a[j]; ans.push_back(tmp); while(i < j && a[i+1]==a[i]) i++; i++; j--; } } while(k < a.size()-2 && a[k] == a[k+1]) k++; } return ans; } };
最开始的代码如注释中所示。
遇到的问题是,测试数据个数小于3的时候,会崩溃。
想了想原因,在于a.size()是一个无符号数,无符号的 1-3,会得到一个大的无符号数!
bug由此产生。