-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy pathTHreeSum.cpp
29 lines (24 loc) · 879 Bytes
/
THreeSum.cpp
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) {
vector<vector<int>>ans;
sort(nums.begin(),nums.end());
int s=nums.size();
for(int i=0;i<s;i++){
if (i > 0 and nums[i] == nums[i-1]) continue;
int beg=i+1,end=s-1;
while(beg<end){
int curSum=nums[i]+nums[beg]+nums[end];
if(curSum==0){
ans.push_back({nums[i],nums[beg],nums[end]});
int prevLeft=nums[beg],prevRight=nums[end];
while(beg<end && nums[beg]==prevLeft) beg++;
while(beg<end && nums[end]==prevRight) end--;
}else if(curSum>0){
end--;
}else
beg++;
}
}return ans;
}
};