leetcode 15 3Sum

来源:互联网 发布:淘宝店铺运营思路 编辑:程序博客网 时间:2024/06/01 07:19

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;}


0 0
原创粉丝点击