这道题是Two Sum的升级版。本来想写一个三重循环暴力,结果超时了。后来我仔细想了想其实是用了STL的find函数所以超时的。
最后是用夹逼法写while循环做的:
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
int n = nums.size();
if(n<3)
return res;
sort(nums.begin(), nums.end());
for (int i=0; i<n-2; i++) {
if(nums[i]==nums[i-1]&&i>0) continue;
int j = i+1;
int k = n-1;
while(j<k) {
int sum = nums[i] + nums[j] + nums[k];
if(sum==0) {
vector<int> list = {nums[i], nums[j], nums[k]};
res.push_back(list);
while(j<k&&nums[j]==nums[j+1])j++;
while(j<k&&nums[k]==nums[k-1])k--;
j++;k--;
}
else if(sum>0) k--;
else j++;
}
}
return res;
}
};
由于不能用find循环所以要手动查重,这一点很坑。