-
Notifications
You must be signed in to change notification settings - Fork 9
/
Three Sum.cpp
54 lines (37 loc) · 1.28 KB
/
Three Sum.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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// PROBLEM :- https://leetcode.com/problems/3sum/
// LEETCODE | MEDIUM | ARRAY
// Solution :- T.C :- O(N^2) S.C :- cant_understand
// Logic :- Find 2 sum in sorted array in O(N). Then one outer loops to make it 3 sum.
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> ans;
set<vector<int>> tempSet;
if(nums.size() <= 2){
return ans;
}
sort(nums.begin(), nums.end());
for(int i = 0 ; i < nums.size() - 2; i++){
int left = -1 * nums[i];
int low = i + 1;
int high = nums.size() - 1;
while(low < high){
if(left == nums[low] + nums[high]){
vector<int> temp = {nums[i], nums[low], nums[high]};
sort(temp.begin(), temp.end());
tempSet.insert(temp);
low++;
high--;
}else if(left > nums[low] + nums[high]){
low++;
}else{
high--;
}
}
}
for(auto itr : tempSet){
ans.push_back(itr);
}
return ans;
}
};