Leetcode 15 3Sum
这道题又是对撞指针的妙用,使用对撞指针的几个注意点:
1.数组必须是排好序的。
2.对于各种相等的处理。
class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { int n = nums.size(); vector<vector<int>> ret; sort(nums.begin(), nums.end()); for (int i=0; i<n-2; ++i) { int l = i + 1; int r = n - 1; while (l < r) { if (nums[l] + nums[r] == -nums[i]) { ret.push_back({nums[i], nums[l++], nums[r--]}); while (l < r && nums[l] == nums[l - 1]) { ++l; } while (l < r && nums[r] == nums[r + 1]) { --r; } } else if (nums[l] + nums[r] > -nums[i]) { --r; } else { ++l; } } while (i < n-2 && nums[i] == nums[i+1]) { ++i; } } return ret; } };

浙公网安备 33010602011771号