leetcode 第15題,三個數的和


這題目和兩個數的和求法一樣,多了一層遍歷,所以復雜度為O(n^2)

重要的地方是防止重復vector的push,所以要檢測是否重復

#include <vector> 
#include <iostream>
#include <algorithm>

using namespace std;


vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> ret;
if(nums.empty())
return ret;
sort(nums.begin(),nums.end());
for(int i=0;i<=nums.size()-3;i++)
{
if(nums[i]>0)
break;
int start=i+1;
int last=nums.size()-1;

while(start<last)
{
if(nums[start]+nums[last]==-nums[i])
{
ret.push_back({nums[i],nums[start],nums[last]});
start++;
last--;
//ignore the duplicate
while(start<last&&nums[start]==nums[start-1])
start++;
while(start<last&&nums[last]==nums[last+1])
last--;
}
else if(nums[start]+nums[last]<-nums[i])
start++;
else
last--;
}
//ignore the duplicate
while(nums[i+1]==nums[i])
i++;
}
return ret;
}

int main()
{
vector<int> vec={-2,0,1,1,2};
auto ret=threeSum(vec);
for(auto vec:ret)
{
for(auto val:vec)
cout<<val<<" ";
cout<<endl;
}
return 0;
}





注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com