Skip to content

Commit 58d19eb

Browse files
committed
Runtime: 259 ms (Top 22.83%) | Memory: 13.2 MB (Top 82.16%)
1 parent 77343d6 commit 58d19eb

File tree

1 file changed

+34
-33
lines changed

1 file changed

+34
-33
lines changed

scripts/algorithms/0-9/4Sum/4Sum.cpp

+34-33
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,89 @@
1+
// Runtime: 259 ms (Top 22.83%) | Memory: 13.2 MB (Top 82.16%)
12
class Solution {
23
public:
34
vector<vector<int>> fourSum(vector<int>& nums, int target) {
4-
5+
56
int n = nums.size();
6-
7+
78
vector<vector<int> > answer;
8-
9+
910
if(n<4) return answer;
10-
11+
1112
sort(nums.begin(),nums.end());
12-
13+
1314
for(int i=0;i<n;){
1415
for(int j=i+1;j<n;){
15-
16+
1617
int left = j+1;
1718
int right = n-1;
18-
19+
1920
long long int x = (long long int)target - (long long int)nums[i] - (long long int)nums[j];
20-
21+
2122
while(left<right){
22-
23+
2324
if(x == nums[left]+nums[right]){
2425
vector<int> vect{nums[i] , nums[j] , nums[left] , nums[right]};
2526
answer.push_back(vect);
26-
27+
2728
//skipping duplicates while moving right
2829
int k = 1;
2930
while((left+k)<n && nums[left+k]==nums[left]) ++k;
30-
31+
3132
if((left+k)>=n) break;
3233
else left = left+k;
33-
34+
3435
//skipping duplicates while moving left
3536
k = 1;
3637
while((right-k)>=0 && nums[right-k]==nums[right]) ++k;
37-
38+
3839
if((right-k)<0) break;
3940
else right = right-k;
40-
41+
4142
}
4243
else{
43-
44+
4445
if(x>nums[left]+nums[right]){
45-
46+
4647
//skipping duplicates while moving right
4748
int k = 1;
4849
while((left+k)<n && nums[left+k]==nums[left]) ++k;
49-
50+
5051
if((left+k)>=n) break;
5152
else left = left+k;
52-
53+
5354
}
5455
else{
55-
56+
5657
//skipping duplicates while moving left
5758
int k = 1;
5859
while((right-k)>=0 && nums[right-k]==nums[right]) ++k;
59-
60+
6061
if((right-k)<0) break;
6162
else right = right-k;
62-
63+
6364
}
64-
65-
}
66-
65+
6766
}
68-
67+
68+
}
69+
6970
//skipping duplicates while moving right
7071
int k = 1;
7172
while((j+k)<n && nums[j+k]==nums[j]) ++k;
72-
73+
7374
if((j+k)>=n) break;
74-
else j = j+k;
75-
75+
else j = j+k;
76+
7677
}
77-
78+
7879
//skipping duplicates while moving right
7980
int k = 1;
8081
while((i+k)<n && nums[i+k]==nums[i]) ++k;
81-
82+
8283
if((i+k)>=n) break;
83-
else i = i+k;
84+
else i = i+k;
8485
}
85-
86+
8687
return answer;
8788
}
88-
};
89+
};

0 commit comments

Comments
 (0)