LeetCode 15. sum3
原题链接
简单
作者:
孤独时代的罗永浩
,
2020-06-25 00:35:37
,
所有人可见
,
阅读 577
C++ 先确定一个数字,再用双指针确定另外的两个数字(我也是看别人的题解才明白的哈哈哈)
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
sort(nums.begin(), nums.end());
for(int st = 0; st < nums.size(); st++)
{
//找出第一个出现的和上一个数字不同的数字的位置
while(st != 0 && st < nums.size() && nums[st] == nums[st - 1])
st++;
//双指针查找,三个元素,极端情况三个元素指向相同数字
int left = st + 1;
int right = nums.size() - 1;
while(left < right)
{
if(nums[st] + nums[left] + nums[right] == 0)
{
res.push_back({nums[st], nums[left], nums[right]});
//跳过所有相同的元素
do{left++;} while(left < right && nums[left] == nums[left - 1]);
do{right--;} while(left < right && nums[right] == nums[right + 1]);
}
else if(nums[st] + nums[left] + nums[right] > 0)
do{right--;} while(left < right && nums[right] == nums[right + 1]);
else
do{left++;} while(left < right && nums[left] == nums[left - 1]);
}
}
return res;
}
};