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
| class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> res; sort(nums.begin(),nums.end()); for(int i = 0; i + 2 < nums.size() ; ++i) { if(nums[i] > 0) break; if(i > 0 && nums[i] == nums[i-1]) continue;
int target = - nums[i]; int l = i + 1, r = nums.size() - 1; while(l < r) { int sum = nums[l] + nums[r]; if(sum == target) { res.push_back({nums[i],nums[l],nums[r]}); l++; r--; while(l < r && nums[l] == nums[l-1]) l++; while(l < r && nums[r] == nums[r+1]) r--; } if(sum < target) l++; if(sum > target) r--; } } return res; } };
|