跳到主要内容

15 三数之和

https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvpj16/

cost: 26m42s

class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
std::sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size(); i++) {
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
if (nums[i] > 0) {
break;
}
int target = -nums[i];
for (int j = i + 1, k = nums.size() - 1; j < k;) {
int sum = nums[j] + nums[k];
if (sum < target) {
j++;
continue;
}
if (sum > target) {
k--;
continue;
}
if (j > i + 1 && nums[j] == nums[j - 1]) {
j++;
continue;
}
if (k < nums.size() - 1 && nums[k] == nums[k + 1]) {
k--;
continue;
}
res.push_back({nums[i], nums[j], nums[k]});
j++;
k--;
}
}
return res;
}
};