#include <iostream>
#include <algorithm>
#include "string"
#include "vector"
#include "set"
using namespace std;
vector<vector<int>> threeSum(vector<int>& nums)
{
std::sort(nums.begin(), nums.end());
vector<vector<int>> ans;
for (int c = nums.size() - 1; c >= 2; c--)
{
for (int a = 0, b = c - 1; a < b;)
{
int sum = nums[a] + nums[b];
if (sum > -nums[c])
b--;
else if (sum < -nums[c])
a++;
else
{
vector<int> nums_result;
nums_result.push_back(nums[a]);
nums_result.push_back(nums[b]);
nums_result.push_back(nums[c]);
ans.push_back(nums_result);
//这里因为固定了后两个,判断前面的是不是重复 重复就跳过
while (a<b&&nums[a] == nums[a + 1]) a++;//难以理解
a++;
}
}
// 对固定的右指针看是不是有重复
while (c >= 1 && nums[c] == nums[c - 1]) c--;
}
return ans;
}
int main()
{
vector<int>v1;
v1.push_back(-1);
v1.push_back(0);
v1.push_back(1);
v1.push_back(2);
v1.push_back(-1);
v1.push_back(-4);
threeSum(v1);
system("pause");
return 0;
}