首先想到的就是3次for循环,从头找到尾,但是time limite exceeded。
考虑优化一下,可以先排序,然后从头开始,找到其相反数
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums)
{
if (nums.size() < 3)
return {};
sort(nums.begin(), nums.end());
vector<vector<int>> result;
int k = 0;
while (k < nums.size() && nums[k] <= 0)
{
int i = k + 1;
int j = nums.size() - 1;
while (i < j)
{
int sum = nums[i] + nums[j];
if (sum < -nums[k])
{
i++;
while (i < j && nums[i] == nums[i-1]) i++;
}
else if (sum > -nums[k])
{
j--;
while (i < j && nums[j] == nums[j+1]) j--;
}
else
{
result.push_back({nums[k], nums[i], nums[j]});
i++;
while (i < j && nums[i] == nums[i-1]) i++;
j--;
while (i < j && nums[j] == nums[j+1]) j--;
}
}
k++;
while (k < i && nums[k] == nums[k-1]) k++;
}
return result;
}
};这是别人写的代码。
本文介绍了一种优化三数之和算法的方法,通过排序和双指针技巧,有效解决了时间限制超时的问题。该算法首先进行排序,然后使用三重循环查找目标值的相反数,通过跳过重复元素来提高效率。
883

被折叠的 条评论
为什么被折叠?



