3Sum
考虑了对vector的理解运用
一开始企图通过迭代器iterator来find第三个的值
vector<int>::iterator it;
it=find(nums.begin(),nums.end(),0-nums.at(i)-nums.at(j));
if(it!=nums.end()&&nums.at(i)!=*it&&nums.at(i)!=*it)
...
真的很笨,其实通过sort()来排序可以完全不用考虑重复的情况,使用方法
sort(nums.begin(),nums.end());
不能用三重循环,这样就会超时,所以在已经掌握的知识中还是从二重循环来考虑
和回文相反的是,第二个值从前向后寻找,第三个值从后往前寻找,这样就解决了时间复杂度的问题
同时,考虑重复的问题,对三个数都要进行相应的操作
代码如下:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>>::iterator it1;
vector<vector<int>> threeV;
if(nums.size()<=2)
return threeV;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++)
{
int a=nums[i];
if(a>0)
break;
if(i>0&&a==nums[i-1])
continue;
for(int j=i+1,k=nums.size()-1;j<k;)
{
int b=nums[j],c=nums[k];
if(a+b+c==0)
{
threeV.push_back(vector<int> {a,b,c});
while(j<k&&b==nums[++j]){}
while(j<k&&b==nums[--k]){}
}
else if(a+b+c>0)
{
k--;
}
else
j++;
}
}
return threeV;
}