26
26
#include < vector>
27
27
#include < set>
28
28
#include < algorithm>
29
+
29
30
using namespace std ;
30
31
31
32
@@ -47,7 +48,7 @@ using namespace std;
47
48
vector<vector<int > > threeSum (vector<int > &num) {
48
49
49
50
vector< vector<int > > result;
50
- if (num.size ()== 0 || num.size ()== 1 || num.size () == 2 ) return result;
51
+ if (num.size () == 0 || num.size () == 1 || num.size () == 2 ) return result;
51
52
52
53
// sort the array, this is the key
53
54
sort (num.begin (), num.end ());
@@ -56,14 +57,14 @@ vector<vector<int> > threeSum(vector<int> &num) {
56
57
57
58
for (int i=0 ; i<n-2 ; i++) {
58
59
// skip the duplication
59
- if (i> 0 && num[i- 1 ]== num[i]) continue ;
60
+ if (i > 0 && num[i - 1 ] == num[i]) continue ;
60
61
int a = num[i];
61
- int low = i+ 1 ;
62
- int high = n- 1 ;
63
- while ( low < high ) {
62
+ int low = i + 1 ;
63
+ int high = n - 1 ;
64
+ while (low < high) {
64
65
int b = num[low];
65
66
int c = num[high];
66
- if (a+b+ c == 0 ) {
67
+ if (a + b + c == 0 ) {
67
68
// got the soultion
68
69
vector<int > v;
69
70
v.push_back (a);
@@ -72,17 +73,17 @@ vector<vector<int> > threeSum(vector<int> &num) {
72
73
result.push_back (v);
73
74
// Continue search for all triplet combinations summing to zero.
74
75
// skip the duplication
75
- while (low<n- 1 && num[low]== num[low+ 1 ]) low++;
76
- while (high> 0 && num[high]== num[high- 1 ]) high--;
76
+ while (low < n - 1 && num[low] == num[low + 1 ]) low++;
77
+ while (high > 0 && num[high] == num[high - 1 ]) high--;
77
78
low++;
78
79
high--;
79
80
} else if (a+b+c > 0 ) {
80
81
// skip the duplication
81
- while (high> 0 && num[high]== num[high- 1 ]) high--;
82
+ while (high > 0 && num[high] == num[high - 1 ]) high--;
82
83
high--;
83
- } else {
84
+ } else {
84
85
// skip the duplication
85
- while (low<n- 1 && num[low]== num[low+ 1 ]) low++;
86
+ while (low < n - 1 && num[low] == num[low + 1 ]) low++;
86
87
low++;
87
88
}
88
89
}
@@ -98,21 +99,21 @@ int sum(vector<int>& v);
98
99
vector<vector<int > > threeSum2 (vector<int > &num) {
99
100
vector< vector<int > > result;
100
101
vector< vector<int > > r = combination (num, 3 );
101
- for (int i= 0 ; i< r.size (); i++){
102
- if (isSumZero (r[i])){
102
+ for (int i = 0 ; i < r.size (); i++) {
103
+ if (isSumZero (r[i])) {
103
104
result.push_back (r[i]);
104
105
}
105
106
}
106
107
return result;
107
108
}
108
109
109
- bool isSumZero (vector< int >& v){
110
- return sum (v)== 0 ;
110
+ bool isSumZero (vector < int >& v) {
111
+ return sum (v) == 0 ;
111
112
}
112
113
113
- int sum (vector<int >& v){
114
- int s= 0 ;
115
- for (int i= 0 ; i< v.size (); i++){
114
+ int sum (vector<int >& v) {
115
+ int s = 0 ;
116
+ for (int i = 0 ; i < v.size (); i++) {
116
117
s += v[i];
117
118
}
118
119
return s;
@@ -123,39 +124,39 @@ vector<vector<int> > combination(vector<int> &v, int k) {
123
124
vector<vector<int > > result;
124
125
vector<int > d;
125
126
int n = v.size ();
126
- for (int i= 0 ; i< n; i++){
127
- d.push_back ( (i< k) ? 1 : 0 );
127
+ for (int i = 0 ; i < n; i++) {
128
+ d.push_back ( (i < k) ? 1 : 0 );
128
129
}
129
130
130
131
// 1) from the left, find the [1,0] pattern, change it to [0,1]
131
132
// 2) move all of the 1 before the pattern to the most left side
132
133
// 3) check all of 1 move to the right
133
- while (1 ){
134
+ while (1 ) {
134
135
vector<int > tmp;
135
- for (int x= 0 ; x< n; x++){
136
+ for (int x = 0 ; x < n; x++) {
136
137
if (d[x]) tmp.push_back (v[x]);
137
138
}
138
139
sort (tmp.begin (), tmp.end ());
139
140
result.push_back (tmp);
140
141
// step 1), find [1,0] pattern
141
142
int i;
142
143
bool found = false ;
143
- int ones =0 ;
144
- for (i= 0 ; i<n- 1 ; i++){
144
+ int ones = 0 ;
145
+ for (i = 0 ; i < n - 1 ; i++) {
145
146
146
- if (d[i]== 1 && d[i+ 1 ]== 0 ) {
147
- d[i]= 0 ; d[i+ 1 ]= 1 ;
147
+ if (d[i] == 1 && d[i + 1 ] == 0 ) {
148
+ d[i] = 0 ; d[i + 1 ] = 1 ;
148
149
found = true ;
149
150
// step 2) move all of right 1 to the most left side
150
- for (int j= 0 ; j< i; j++){
151
- d[j]= ( ones > 0 ) ? 1 : 0 ;
151
+ for (int j = 0 ; j < i; j++) {
152
+ d[j] = ( ones > 0 ) ? 1 : 0 ;
152
153
ones--;
153
154
}
154
155
break ;
155
156
}
156
- if (d[i]== 1 ) ones++;
157
+ if (d[i] == 1 ) ones++;
157
158
}
158
- if (!found){
159
+ if (!found) {
159
160
break ;
160
161
}
161
162
@@ -166,9 +167,9 @@ vector<vector<int> > combination(vector<int> &v, int k) {
166
167
167
168
void printMatrix (vector<vector<int > > &matrix)
168
169
{
169
- for (int i= 0 ; i< matrix.size (); i++){
170
+ for (int i = 0 ; i < matrix.size (); i++) {
170
171
printf (" {" );
171
- for (int j= 0 ; j< matrix[i].size (); j++) {
172
+ for (int j = 0 ; j < matrix[i].size (); j++) {
172
173
printf (" %3d " , matrix[i][j]) ;
173
174
}
174
175
printf (" }\n " );
@@ -179,9 +180,9 @@ void printMatrix(vector<vector<int> > &matrix)
179
180
180
181
int main ()
181
182
{
182
- // int a[] = {-1, 0, 1, 2, -1, 1, -4};
183
- int a[] = {-1 , 1 , 1 , 1 , -1 , -1 , 0 ,0 ,0 };
184
- vector<int > n (a, a+ sizeof (a)/sizeof (int ));
183
+ // int a[] = { -1, 0, 1, 2, -1, 1, -4 };
184
+ int a[] = { -1 , 1 , 1 , 1 , -1 , -1 , 0 ,0 ,0 };
185
+ vector<int > n (a, a + sizeof (a)/sizeof (int ));
185
186
vector< vector<int > > result = threeSum (n);
186
187
printMatrix (result);
187
188
return 0 ;
0 commit comments