题目:三数之和
原题链接:(https://leetcode-cn.com/problems/3sum/)
当然,暴力的方法就不说了,本来自己是尝试了双指针,但是忘了判定重复方案;加上了判定重复方案的代码后,各种数组越界的出错,找了“题解”上的大佬的思路,发现思路是差不多的,但提交就是各种出错:
(先贴一张这道题血泪史)
最终,硬是照着“题解”中大佬们给出的代码“一步一步”的改成了“别人的代码”:
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> ans;
int n = nums.size();
if(n < 3) return ans;
for(int i = 0; i < n - 2; i++)
{
if(i == 0 || (i > 0 && nums[i] != nums[i - 1]))
{
int L = i + 1, R = n - 1;
while(L < R)
{
if(nums[i] + nums[L] + nums[R] == 0)
{
if(L == i + 1 || nums[L] != nums[L - 1])
{
vector<int> v;
v.push_back(nums[i]);
v.push_back(nums[L]);
v.push_back(nums[R]);
ans.push_back(v);
}
L++;
R--;
}
else if(nums[i] + nums[L] + nums[R] < 0)
{
L++;
}
else
{
R--;
}
}
}
}
return ans;
}
};
题外话:
痛苦分两种,一种让你变得更强;另一种则毫无价值,只是徒增折磨
——《纸牌屋》