-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathThreeSum.cpp
More file actions
53 lines (42 loc) · 1.25 KB
/
ThreeSum.cpp
File metadata and controls
53 lines (42 loc) · 1.25 KB
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0.
// Notice that the solution set must not contain duplicate triplets.
// Example 1:
// Input: nums = [-1,0,1,2,-1,-4]
// Output: [[-1,-1,2],[-1,0,1]]
// Example 2:
// Input: nums = []
// Output: []
// Example 3:
// Input: nums = [0]
// Output: []
// Constraints:
// 0 <= nums.length <= 3000
// -105 <= nums[i] <= 105
//code:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> ans;
sort(nums.begin(),nums.end());
int n = nums.size();
for(int i=0;i<n;i++){
int a = nums[i];
int target = -a;
//now two sum approach
int s = i+1;
int e = n-1;
while(s<e){
if(nums[s]+nums[e]==target){
ans.push_back({nums[i],nums[s],nums[e]});
//to avoid repetation
while(s<e && nums[s]==nums[s+1])s++;
while(s<e && nums[e]==nums[e-1])e--;
s++;
e--;
}else if(nums[s]+nums[e]<target)
s++;
else
e--;
}
while(i+1<n && nums[i]==nums[i+1])i++;
}
return ans;
}