File tree Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Original file line number Diff line number Diff line change 1+ // Time: O(n^2)
2+ // Space: O(1)
3+
4+ class Solution {
5+ public:
6+ vector<vector<int >> threeSum (vector<int >& nums) {
7+ vector<vector<int >> ans;
8+ const int target = 0 ;
9+
10+ // Make nums in increasing order. Time: O(nlogn)
11+ sort (nums.begin (), nums.end ());
12+
13+ for (int i = 0 ; i < nums.size () - 2 ; ++i) {
14+ if (i == 0 || nums[i] != nums[i - 1 ]) { // Skip duplicated.
15+ for (int j = i + 1 , k = nums.size () - 1 ; j < k; ) { // Time: O(n) for each i.
16+ if (j - 1 > i && nums[j] == nums[j - 1 ]) { // Skip duplicated.
17+ ++j;
18+ } else if (k + 1 < nums.size () && nums[k] == nums[k + 1 ]) { // Skip duplicated.
19+ --k;
20+ } else {
21+ const auto sum = nums[i] + nums[j] + nums[k];
22+ if (sum > target) { // Should decrease sum.
23+ --k;
24+ } else if (sum < target) { // Should increase sum.
25+ ++j;
26+ } else {
27+ ans.push_back ({nums[i], nums[j], nums[k]});
28+ ++j, --k;
29+ }
30+ }
31+ }
32+ }
33+ }
34+
35+ return ans;
36+ }
37+ };
You can’t perform that action at this time.
0 commit comments