【双指针- LeetCode】15.三数之和
15. 三数之和 - 力扣(LeetCode)
题解:
官方给的解决方法有点小麻烦,这里在评论区找到一个比较友好的双指针模板。
相对于传统的双指针,这里不同的是,在不符合条件时,两边都需要移动。
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(), nums.end());vector<vector<int>>res;int n = nums.size();for(int i = 0; i < n; i ++){// 跳过重复元素if(i > 0 && nums[i] == nums[i-1]) continue;int l = i + 1, r = n - 1;while(l<r){int sum = nums[l] + nums[r] + nums[i];if(sum == 0){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--;}else if(sum > 0) { r--; } // 和太大,需要小一些else {l++;}}}return res;}
};