File tree 1 file changed +21
-29
lines changed
1 file changed +21
-29
lines changed Original file line number Diff line number Diff line change 1
1
class Solution {
2
-
3
2
public:
4
- vector<vector<int > > threeSum (vector<int > &num ) {
3
+ vector<vector<int >> threeSum (vector<int >& nums ) {
5
4
vector<vector<int >> result;
6
- if (num.size () < 3 ) return result;
7
-
8
- sort (num.begin (), num.end ());
9
- int buf1 (INT_MAX), buf2 (INT_MAX), buf3 (INT_MAX);
5
+
6
+ sort (nums.begin (), nums.end ());
10
7
11
- for (int i = 0 ;i < num .size ()- 2 ; ) {
12
- int remain = -num [i];
13
- int j = i+ 1 ;
14
- int k = num. size ()- 1 ;
8
+ for (int i = 0 ; i < nums .size (); i++ ) {
9
+ if (i > 0 && nums[i - 1 ] == nums [i]) {
10
+ continue ;
11
+ }
15
12
16
- while (j < k && j < num.size ()-1 ) {
17
- int tmp = num[j] + num[k];
18
- if (tmp == remain) {
19
- int a[3 ] = {num[i], num[j], num[k]};
20
- vector<int > v (a, a+3 );
21
- if (!(num[i] == buf1 && num[j] == buf2 && num[k] == buf3)) {
22
- buf1 = num[i];
23
- buf2 = num[j];
24
- buf3 = num[k];
25
- result.push_back (v);
26
- }
13
+ int j = i + 1 ;
14
+ int k = nums.size () - 1 ;
15
+
16
+ while (j < k) {
17
+ int sum = nums[i] + nums[j] + nums[k];
18
+ if (sum < 0 ) {
27
19
j++;
20
+ } else if (sum > 0 ) {
21
+ k--;
22
+ } else {
23
+ result.push_back ({nums[i], nums[j], nums[k]});
24
+ while ((j + 1 ) < nums.size () && nums[j] == nums[j+1 ]) j++;
25
+ j++;
26
+ while ((k - 1 ) >= 0 && nums[k] == nums[k - 1 ]) k--;
28
27
k--;
29
28
}
30
- else if (tmp > remain) k--;
31
- else j++;
32
- }
33
-
34
- do {
35
- i++;
36
29
}
37
- while (i < num.size () && num[i-1 ] == num[i]);
38
30
}
31
+
39
32
return result;
40
33
}
41
-
42
34
};
You can’t perform that action at this time.
0 commit comments