Skip to content

Commit 7055d33

Browse files
authored
Update 3Sum - Leetcode 15.cpp
1 parent 8e100bf commit 7055d33

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

3Sum - Leetcode 15/3Sum - Leetcode 15.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
2+
// Hashmap Solution:
13
#include <vector>
24
#include <unordered_map>
35
#include <set>
@@ -33,3 +35,46 @@ class Solution {
3335
return vector<vector<int>>(result.begin(), result.end());
3436
}
3537
};
38+
39+
40+
// Two Pointer Solution:
41+
#include <vector>
42+
#include <algorithm>
43+
44+
using namespace std;
45+
46+
class Solution {
47+
public:
48+
vector<vector<int>> threeSum(vector<int>& nums) {
49+
sort(nums.begin(), nums.end());
50+
int n = nums.size();
51+
vector<vector<int>> answer;
52+
53+
for (int i = 0; i < n; i++) {
54+
if (nums[i] > 0) {
55+
break;
56+
}
57+
if (i > 0 && nums[i] == nums[i - 1]) {
58+
continue;
59+
}
60+
int lo = i + 1, hi = n - 1;
61+
while (lo < hi) {
62+
int sum = nums[i] + nums[lo] + nums[hi];
63+
if (sum == 0) {
64+
answer.push_back({nums[i], nums[lo], nums[hi]});
65+
lo++;
66+
hi--;
67+
while (lo < hi && nums[lo] == nums[lo - 1]) lo++;
68+
while (lo < hi && nums[hi] == nums[hi + 1]) hi--;
69+
} else if (sum < 0) {
70+
lo++;
71+
} else {
72+
hi--;
73+
}
74+
}
75+
}
76+
77+
return answer;
78+
}
79+
};
80+

0 commit comments

Comments
 (0)