几个简单但有用的推导
1.排序可以帮助解决重复问题(后面推导的前提)
2.仅需保证外两层本次值与上次值不同即可保证整个不重复
3.第三层从后往前优化时间,第一个数小于等于0优化时间
思路都想到了,用代码表达的比较蠢,后面就想歪了
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int s=nums.size();
sort(nums.begin(),nums.end());
vector<vector<int>>an;
for(int first=0;first<s;first++)
{
if(first>0&&nums[first]==nums[first-1])
continue;
int third=s-1;
int t=-nums[first];
for(int se=first+1;se<s&&nums[first]<=0;se++)
{
if(se>first+1&&nums[se]==nums[se-1]){
continue;
}
while(se<third&&nums[se]+nums[third]>t)
{
--third;
}
if(se==third)
{
break;
}
if(nums[se]+nums[third]==t)
{
an.push_back({nums[first],nums[se],nums[third]});
}
}
}
return an;
}
};