暴力算法必须贴,虽然超时了,但我真的觉得是个好办法
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums)
{
vector<vector<int>> result;
int n = nums.size();
if(n<=2)
return result;
vector<int> temp;
for(int i = 0 ; i < n-2 ; i++)
{
for(int j = i+1 ; j < n-1 ; j++)
{
for(int k = j+1 ; k<n ; k++)
{
if(nums[i] + nums[j] + nums[k] == 0)
{
temp = {nums[i],nums[j],nums[k]};
sort(temp.begin(),temp.end());
result.push_back(temp);
}
}
}
}
sort(result.begin(),result.end());
result.erase(unique(result.begin(),result.end()),result.end());
return result;
}
};
排序是个好思路,先把所有数据从小到达排序,进行第二个循环的时候b和c可以同步进行,一个从前往后,一个从后往前
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums)
{
vector<vector<int>> result;
int n = nums.size();
if(n<=2)
return result;
sort(nums.begin(),nums.end());
vector<int> temp;
int i = 0;
for(int i = 0 ; i < n-2 ; i++) //第一位不一样
{
if(i > 0 && nums[i] == nums[i-1])
continue;
int k = n-1;
for(int j = i+1 ; j < n-1 ; j++) //对j循环
{
if(j > i+1 && nums[j] == nums[j-1]) //保证第二个数不重复
continue;
while(j < k && nums[i]+nums[j]+nums[k]>0)
{
k--;
}
if(j == k)
break;
if(nums[i]+nums[j]+nums[k] == 0)
result.push_back({nums[i],nums[j],nums[k]});
}
}
return result;
}
};
原文:https://www.cnblogs.com/zhaohhhh/p/15147283.html