两数之和用左右指针向中间集中
三数之和sum减去其中一个,剩下两个左右指针
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
int len=nums.size();
if(len<3)
return res;
sort(nums.begin(),nums.end());
for(int i=0;i<len-2;i++)
{
int l=i+1,h=len-1;
vector<int> tmp(3);
int sum=0-nums[i];
while(l<h)
{
if(nums[l]+nums[h]==sum)
{
tmp[0]=nums[i];
tmp[1]=nums[l++];
tmp[2]=nums[h--];
res.push_back(tmp);
while(l<h && nums[l]==nums[l-1]) //去重
l++;
while(l<h && nums[h]==nums[h+1]) //去重
h++;
}
else if(nums[l]+nums[h]<sum)
{
l++;
while(l<h && nums[l]==nums[l-1]) //去重
l++;
}
else
{
h--;
while(l<h && nums[h]==nums[h+1]) //去重
h--;
}
}
while(i < len-2 && nums[i+1] == nums[i]) //去重
i++;
}
return res;
}
};
946

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



