-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy path3Sum.cpp
30 lines (30 loc) · 891 Bytes
/
3Sum.cpp
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
/*
1 sort
2 not duplicate
3 k-- not k++
*/
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
vector<vector<int> > res;
int n = num.size();
if (n < 3) return res;
sort(num.begin(), num.end());
for (int i = 0; i<n; i++){
if (i && num[i] == num[i-1]) continue;
for (int j = i+1, k = n-1; j<k; j++){
if (j > i+1 && num[j] == num[j-1]) continue;
while (k>j && num[i]+num[j]+num[k]> 0){
k--;
}
if (k>j && num[i] + num[j] + num[k] == 0){
res.push_back(vector<int>());
res.back().push_back(num[i]);
res.back().push_back(num[j]);
res.back().push_back(num[k]);
}
}
}
return res;
}
};