class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
// Note: The Solution object is instantiated only once and is reused by each test case.
vector<vector<int> >ans;
if(num.size()<=2)
return ans;
sort(num.begin(),num.end());//sort,O(n*logn)
for(int i=0;i<=num.size()-3;i++)//O(n*n)
{
if(i>=1&&num[i]==num[i-1])//去重
continue;
int sta=i+1,end=num.size()-1;
while(sta<end)//O(n)确定了一个a后,看后面可否出两个b、c,使得b+c=-a
{
int sum=num[sta]+num[end];
if(sum==-num[i])
{
vector<int> vec;
vec.push_back(num[i]);
vec.push_back(num[sta]);
vec.push_back(num[end]);
ans.push_back(vec);
int oldSta=num[sta];
while(sta<=num.size()-2&&num[sta]==oldSta)//去重,刚用上的num[sta]不可再用了
sta++;
}
else if(sum<-num[i])
sta++;
else end--;
}
}
return ans;
}
};
【leetcode】3Sum
最新推荐文章于 2022-01-27 22:44:32 发布