Skip to content

Commit 7ff4389

Browse files
committed
3Sum
1 parent 63a8c49 commit 7ff4389

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

15.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Time: O(n^2)
2+
// Space: O(1)
3+
4+
class Solution {
5+
public:
6+
vector<vector<int>> threeSum(vector<int>& nums) {
7+
vector<vector<int>> ans;
8+
const int target = 0;
9+
10+
// Make nums in increasing order. Time: O(nlogn)
11+
sort(nums.begin(), nums.end());
12+
13+
for (int i = 0; i < nums.size() - 2; ++i) {
14+
if (i == 0 || nums[i] != nums[i - 1]) { // Skip duplicated.
15+
for (int j = i + 1, k = nums.size() - 1; j < k; ) { // Time: O(n) for each i.
16+
if (j - 1 > i && nums[j] == nums[j - 1]) { // Skip duplicated.
17+
++j;
18+
} else if (k + 1 < nums.size() && nums[k] == nums[k + 1]) { // Skip duplicated.
19+
--k;
20+
} else {
21+
const auto sum = nums[i] + nums[j] + nums[k];
22+
if (sum > target) { // Should decrease sum.
23+
--k;
24+
} else if (sum < target) { // Should increase sum.
25+
++j;
26+
} else {
27+
ans.push_back({nums[i], nums[j], nums[k]});
28+
++j, --k;
29+
}
30+
}
31+
}
32+
}
33+
}
34+
35+
return ans;
36+
}
37+
};

0 commit comments

Comments
 (0)