Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 82ab1ab

Browse files
commit
1 parent bc0ae84 commit 82ab1ab

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

‎18. 4Sum.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class Solution {
2+
public:
3+
vector<vector<int>> fourSum(vector<int>& nums, int target) {
4+
vector<vector<int>> result;
5+
int n = nums.size();
6+
if(n < 4) return result;
7+
8+
sort(nums.begin(), nums.end());
9+
10+
for(int i = 0; i < n - 3; i++) {
11+
if(i > 0 && nums[i] == nums[i - 1]) continue; // skip duplicates for i
12+
13+
for(int j = i + 1; j < n - 2; j++) {
14+
if(j > i + 1 && nums[j] == nums[j - 1]) continue; // skip duplicates for j
15+
16+
int left = j + 1;
17+
int right = n - 1;
18+
19+
while(left < right) {
20+
long long sum = (long long)nums[i] + nums[j] + nums[left] + nums[right];
21+
22+
if(sum == target) {
23+
result.push_back({nums[i], nums[j], nums[left], nums[right]});
24+
25+
// skip duplicates for left
26+
while(left < right && nums[left] == nums[left + 1]) left++;
27+
// skip duplicates for right
28+
while(left < right && nums[right] == nums[right - 1]) right--;
29+
30+
left++;
31+
right--;
32+
}
33+
else if(sum < target) left++;
34+
else right--;
35+
}
36+
}
37+
}
38+
return result;
39+
}
40+
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /