class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
sort(nums.begin(), nums.end());
int n = nums.size();
for(int i = 0; i < n; i ++){
while(i && i < n && nums[i] == nums[i - 1]) i ++;
int l = i + 1, r = n - 1;
while(l < r){
if(nums[i] + nums[l] + nums[r] == 0){
res.push_back({nums[i], nums[l], nums[r]});
while(++ l < r && nums[l] == nums[l - 1]); // 需要先加指针,否则会死循环。整个while(l < r),如果先判断 l < r 后 进行加减,则永远无法退出循环
while(l < -- r && nums[r] == nums[r + 1]);
}else if(nums[i] + nums[l] + nums[r] < 0){
while(++ l < r && nums[l] == nums[l - 1]);
}else{
while(l < -- r && nums[r] == nums[r + 1]);
}
}
}
return res;
}
};
leetcode 15. 3Sum 三数和,双指针,跳过重复元素
最新推荐文章于 2022-07-07 23:26:37 发布
1050

被折叠的 条评论
为什么被折叠?



