-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy path3sum.cpp
More file actions
29 lines (28 loc) · 874 Bytes
/
3sum.cpp
File metadata and controls
29 lines (28 loc) · 874 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution
{
public:
vector<vector<int>> threeSum(vector<int>& nums) {
if(nums.size()<=2) return {};
sort(nums.begin(),nums.end());
vector<vector<int>>ans;
if(nums[nums.size()-1]<0) return {};
for(int i=0;i<nums.size()-2;i++){
if(nums[i]>0)break;
if(i>0 && nums[i]==nums[i-1]) continue;
int j=i+1,k=nums.size()-1;
while(k>j){
int s=nums[k]+nums[j];
if(nums[i]+s==0){
ans.push_back({nums[i],nums[j],nums[k]});
while(j<k && nums[j]==nums[j+1] ) j++;
while(j<k && nums[k]==nums[k-1] ) k--;
j++;
k--;
}
else if(nums[i]+s>0) k--;
else j++;
}
}
return ans;
}
};