三数之和
题目
思路
二分优化,细节处理。
代码
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int> > ans;
sort(nums.begin(),nums.end());
int l=nums.size();
for(int a=0;a<l;a++)
{
if(a>0&&nums[a]==nums[a-1]) continue;
if(nums[a]>0) break;
int b=a+1,c=l-1;
while(b<c)
{
if(nums[a]+nums[b]+nums[c]<0) b++;
else if(nums[a]+nums[b]+nums[c]>0) c--;
else
{
ans.push_back(vector<int>{nums[a],nums[b],nums[c]});
b++;c--;
while(b<c&&nums[b]==nums[b-1]) b++;
while(b<c&&nums[c]==nums[c+1]) c--;
}
}
}
return ans;
}
};