Skip to content

Commit e03c8b8

Browse files
author
Sahil
authored
Update 3SumZero.cpp
Reduced code size.
1 parent fc255b5 commit e03c8b8

File tree

1 file changed

+91
-55
lines changed

1 file changed

+91
-55
lines changed

Two-Pointers/3SumZero.cpp

Lines changed: 91 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,106 @@
1-
// https://www.interviewbit.com/problems/3-sum-zero/
2-
31
vector<vector<int> > Solution::threeSum(vector<int> &A) {
4-
// Do not write main() function.
5-
// Do not read input, instead use the arguments to the function.
6-
// Do not print the output, instead return values as specified
7-
// Still have a doubt. Checkout www.interviewbit.com/pages/sample_codes/ for more details
2+
vector<vector<int> > v;
3+
4+
if(A.size() == 0)return v;
85

9-
vector<vector<int> > sol;
6+
vector<pair<int, int> > v1(A.size());
107

11-
if(A.size() < 2){
12-
return sol;
8+
for(int i = 0; i < A.size(); i++){
9+
v1[i] = {A[i], i};
1310
}
1411

15-
sort(A.begin(), A.end());
12+
sort(v1.begin(), v1.end());
1613

17-
int i = 0;
14+
set<vector<int> > mp;
1815

19-
while(i < A.size()-2){
16+
for(int i = 0; i < A.size(); i++){
17+
int firset = v1[i].first;
2018
int j = i+1;
2119
int k = A.size()-1;
22-
LOOP:while(j < k){
23-
int sum = A[i] + A[j] + A[k];
24-
if(sum == 0){
25-
vector<int> temp;
26-
temp.push_back(A[i]);
27-
temp.push_back(A[j]);
28-
temp.push_back(A[k]);
29-
sol.push_back(temp);
30-
temp.erase(temp.begin(),temp.end());
31-
while(A[j] == A[j+1]){
32-
j++;
33-
if(j == A.size()){
34-
break;
35-
}
36-
}
37-
j++;
38-
}
39-
else if(sum > 0){
40-
while(A[k] == A[k-1]){
41-
k--;
42-
if(k == 0){
43-
break;
44-
}
45-
}
46-
k--;
47-
}
48-
else{
49-
while(A[j] == A[j+1]){
50-
j++;
51-
if(j == A.size()){
52-
break;
53-
}
20+
while(j < k){
21+
if(v1[j].first + v1[k].first + firset == 0){
22+
vector<int> v2({A[v1[i].second], A[v1[j].second], A[v1[k].second]});
23+
sort(v2.begin(), v2.end());
24+
if(mp.find(v2) == mp.end()){
25+
v.push_back(v2);
26+
mp.insert(v2);
5427
}
28+
j++; k--;
29+
}else if(v1[j].first + v1[k].first + firset < 0){
5530
j++;
56-
}
57-
58-
}
59-
while(A[i+1] == A[i]){
60-
i++;
61-
if(i == A.size()-1){
62-
return sol;
63-
}
31+
}else k--;
6432
}
65-
i++;
6633
}
34+
return v;
35+
}
36+
37+
// // https://www.interviewbit.com/problems/3-sum-zero/
38+
39+
// vector<vector<int> > Solution::threeSum(vector<int> &A) {
40+
// // Do not write main() function.
41+
// // Do not read input, instead use the arguments to the function.
42+
// // Do not print the output, instead return values as specified
43+
// // Still have a doubt. Checkout www.interviewbit.com/pages/sample_codes/ for more details
6744

68-
return sol;
45+
// vector<vector<int> > sol;
6946

70-
}
47+
// if(A.size() < 2){
48+
// return sol;
49+
// }
50+
51+
// sort(A.begin(), A.end());
52+
53+
// int i = 0;
54+
55+
// while(i < A.size()-2){
56+
// int j = i+1;
57+
// int k = A.size()-1;
58+
// LOOP:while(j < k){
59+
// int sum = A[i] + A[j] + A[k];
60+
// if(sum == 0){
61+
// vector<int> temp;
62+
// temp.push_back(A[i]);
63+
// temp.push_back(A[j]);
64+
// temp.push_back(A[k]);
65+
// sol.push_back(temp);
66+
// temp.erase(temp.begin(),temp.end());
67+
// while(A[j] == A[j+1]){
68+
// j++;
69+
// if(j == A.size()){
70+
// break;
71+
// }
72+
// }
73+
// j++;
74+
// }
75+
// else if(sum > 0){
76+
// while(A[k] == A[k-1]){
77+
// k--;
78+
// if(k == 0){
79+
// break;
80+
// }
81+
// }
82+
// k--;
83+
// }
84+
// else{
85+
// while(A[j] == A[j+1]){
86+
// j++;
87+
// if(j == A.size()){
88+
// break;
89+
// }
90+
// }
91+
// j++;
92+
// }
93+
94+
// }
95+
// while(A[i+1] == A[i]){
96+
// i++;
97+
// if(i == A.size()-1){
98+
// return sol;
99+
// }
100+
// }
101+
// i++;
102+
// }
103+
104+
// return sol;
105+
106+
// }

0 commit comments

Comments
 (0)