3sum 1.0.0
3Sum
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1#include <iostream>
2#include <unordered_map>
3#include <vector>
4#include <set>
5#include <algorithm>
6
7using namespace std;
8
10{
11public:
12 vector<vector<int>> threeSum(vector<int>& nums)
13 {
14 vector<vector<int>> result;
15 sort(nums.begin(), nums.end());
16 int length = nums.size();
17 for (int i = 0; i < length; ++i)
18 {
19 // skip duplicates
20 if (i > 0 && nums[i] == nums[i - 1])
21 continue;
22
23 int target = -nums[i]; // fixing ith element as target for two sum
24 int left = i + 1;
25 int right = length - 1;
26
27 while (left < right)
28 {
29 int sum = nums[left] + nums[right];
30 if (sum == target)
31 {
32 result.push_back({nums[i], nums[left], nums[right]});
33
34 // skip duplicates for left pointer
35 while (left < right && nums[left] == nums[left + 1])
36 ++left;
37
38 // skip duplicates for right pointer
39 while (left < right && nums[right] == nums[right - 1])
40 --right;
41
42 ++left;
43 --right;
44 }
45 else if (sum < target)
46 ++left;
47 else // sum >= target
48 --right;
49 }
50 }
51 return result;
52 }
53};
54
55int main()
56{
57 vector<int> nums = {-1,0,1,2,-1,-4,-2,-3,3,0,4};
58 Solution sol;
59 vector<vector<int>> answer = sol.threeSum(nums);
60 for (vector<int>& array: answer)
61 {
62 for (int el: array)
63 cout << el << " ";
64 cout << ". ";
65 }
66 cout << endl;
67 return 0;
68}
vector< vector< int > > threeSum(vector< int > &nums)
Definition main.cpp:12
int main()
Definition main.cpp:55