-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path4sum.cpp
More file actions
30 lines (29 loc) · 1.06 KB
/
4sum.cpp
File metadata and controls
30 lines (29 loc) · 1.06 KB
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
// 4Sum
class Solution {
public:
vector<vector<int> > fourSum(vector<int> &num, int target) {
vector<vector<int> > ret;
if(num.size() < 4) return ret;
sort(num.begin(), num.end());
int n = num.size();
int i = 0, j, k, l;
while(i < n-3) {
j = i + 1;
while(j < n-2) {
k = j + 1;
l = n - 1;
while(k < l) {
int tsum = num[i] + num[j] + num[k] + num[l];
if(tsum > target) { int tl = num[l]; while(num[--l] == tl);}
else if(tsum < target) { int tk = num[k]; while(num[++k] == tk);}
else {
vector<int> r(4); r[0] = num[i]; r[1] = num[j]; r[2] = num[k]; r[3] = num[l]; ret.push_back(r);
int tk = num[k];while(num[++k] == tk);
}
}
int tj = num[j]; while(num[++j] == tj);
}
int ti = num[i]; while(num[++i] == ti);
}
}
};