Skip to content

Commit d4e420a

Browse files
author
kwu130
committed
feat(src): add 15-threeSum
1 parent 495f34e commit d4e420a

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

‎src/15-threeSum.cpp‎

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
//
2+
// Created by 1412 on 2025/10/12.
3+
//
4+
5+
#include <bits/stdc++.h>
6+
7+
using namespace std;
8+
9+
class Solution {
10+
public:
11+
vector<vector<int>> threeSum(vector<int>& nums) {
12+
if (nums.size() < 3) {
13+
return {};
14+
}
15+
vector<vector<int>> res;
16+
ranges::sort(nums);
17+
for (int i = 0; i < nums.size() - 2; i++) {
18+
if (i > 0 && nums[i] == nums[i - 1]) {
19+
continue;
20+
}
21+
int left = i + 1, right = nums.size() - 1;
22+
while (left < right) {
23+
int sum = nums[i] + nums[left] + nums[right];
24+
if (sum == 0) {
25+
res.push_back({nums[i], nums[left++], nums[right--]});
26+
while (left < right && nums[left] == nums[left - 1]) {
27+
left++;
28+
}
29+
while (left < right && nums[right] == nums[right + 1]) {
30+
right--;
31+
}
32+
} else if (sum < 0) {
33+
left++;
34+
} else {
35+
right--;
36+
}
37+
}
38+
}
39+
return res;
40+
}
41+
};
42+
43+
void test() {
44+
Solution s;
45+
vector<int> nums = {-1, 0, 1, 2, -1, -4};
46+
vector<vector<int>> expected = {{{-1, -1, 2}, {-1, 0, 1}}};
47+
assert(s.threeSum(nums) == expected);
48+
nums = {0, 1, 1};
49+
expected = {};
50+
assert(s.threeSum(nums) == expected);
51+
nums = {0, 0, 0};
52+
expected = {{0, 0, 0}};
53+
assert(s.threeSum(nums) == expected);
54+
}
55+
56+
int main() {
57+
test();
58+
return 0;
59+
}

0 commit comments

Comments
 (0)