您的位置:首页 > 其它

leetcode 15 3Sum

2016-09-19 20:51 363 查看
K Sum问题,第一次刷,没仔细想,超时超时,看了网上的思路后实现了,但是还是超时,在重复数据去掉的地方使用遍历出现超时,于是抄袭了网上的思路,惭愧

vector<vector<int>> threeSum(vector<int>& nums)
{
vector<vector<int>> ans_vec;
int length = nums.size();
if(length<3)
return ans_vec;
int zero_position = length;
sort(nums.begin(),nums.end());

for(vector<int>::iterator it = nums.begin();it!=nums.end();it++)
{
if(*it == 0)
zero_position = it-nums.begin();
}

for(vector<int>::iterator it = nums.begin();it!=nums.begin()+zero_position;it++)
{
vector<int>::iterator it_s = it+1;
vector<int>::iterator it_end = nums.end()-1;
bool flag = false;
if (it > nums.begin() && *it == *(it-1)) //去重,如果没有这步,依然会出现重复数据
continue;
while (it_s<it_end)
{
int plus =*it_s + *it_end;
if (plus == -*it)
{
vector<int> c_ans;

c_ans.push_back(*it);
c_ans.push_back(*it_s);
c_ans.push_back(*it_end);
ans_vec.push_back(c_ans);
while (it_s < it_end && *it_s == *(it_s+1))//去重
it_s++;
while (it_s < it_end && *it_end == *(it_end-1)) //去重
it_end--;

it_s++, it_end--;
}
else if (plus < -*it)
it_s++;
else
it_end--;
}
}

return ans_vec;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: