您的位置:首页 > 其它

【leetcode】3Sum

2013-10-08 01:39 239 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: