15. 三数之和
题目
方法思路
- 排序+三指针+去重
代码
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
if (nums.size() <= 1) return {};
vector<vector<int>> ans;
// 排序
sort(nums.begin(), nums.end());
// 三指针
int first = 0;
int second = 0;
int third = 0;
while (first < nums.size() - 2) {
second = first + 1;
third = nums.size() - 1;
while (second < third) {
if (nums[first] + nums[second] + nums[third] < 0) {
// 去重
while (second + 1 < third && nums[second] == nums[second + 1]) {
second++;
}
second++;
} else if (nums[first] + nums[second] + nums[third] > 0) {
// 去重
while (third - 1 > second && nums[third - 1] == nums[third]) {
third--;
}
third--;
} else {
ans.push_back(vector<int>{nums[first], nums[second], nums[third]});
// 去重
while (second + 1 < third && nums[second] == nums[second + 1]) {
second++;
}
second++;
}
}
// 去重
while (first + 1 < nums.size() - 2 && nums[first] == nums[first + 1]) {
first++;
}
first++;
}
return ans;
}
};
官方题解:三数之和题解