leetcode 3sum

左右夹逼法(先排序)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res
if(nums.size() < 3) return res
sort(nums.begin(), nums())
const int target = 0
auto last = nums()
for(auto i = nums.begin(); i < last - 2; ++i) {
if(i > nums.begin() && *i == *(i - 1)) continue
auto j = i + 1
auto k = last - 1
while(j < k) {
if(*i + *j + *k < target) {
++j;
while(*j == *(j-1) && j < k) ++j;
}else if(*i + *j + *k > target) {
--k
while(*k == *(k+1) && j < k) --k
}else {
res.push_back({*i, *j, *k});
++j;
--k;
while(*j == *(j-1) && j < k) ++j;
while(*k == *(k+1) && j < k) --k;
}
}
}
return res;
}
};