排序,按第一个数a进行循环,b向右找,c向左找。注意可能出现的重复解。
vector<vector<int>> threeSum(vector<int>& nums) {
//和为0
vector<vector<int>> ans;
int len = nums.size();
sort(nums.begin(), nums.end());
for (int i = 0; i < len - 2 && nums[i] <= 0; i++) {
if (i == 0 || nums[i] != nums[i - 1]) {
int j = i + 1, k = len - 1;
while (j < k) {
if (nums[j] + nums[k] == -nums[i]) {
vector<int> v = { nums[i],nums[j],nums[k] };
ans.push_back(v);
while (j + 2 < len && nums[j + 1] == nums[j])j++;
while (k - 2 > i && nums[k - 1] == nums[k])k--;
j++; k--;
}
else if (nums[j] + nums[k] < -nums[i])
j++;
else
k--;
}
}
}
return ans;
}
时间:O(n^2)