给定一个整形数组,要求找出其中和为0的三个数的组合。比如:-1, 0, 1, 2, -1, -4, 则组合有{-1, -1, 2}和{-1, 0, 1}。要求结果中不能有重复,比如{-1, 2, -1}和{-1, -1, 2}重复。
#include <string>
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
set<vector<int> > find_triplets(vector<int> arr)
{
sort(arr.begin(), arr.end());
set<vector<int> > result;
vector<int> value(3);
int n = arr.size();
for (int i = 0; i < n; i++)
{
int j = i+1;
int k = n-1;
while (j < k)
{
int sum = arr[i] + arr[j] + arr[k];
if (sum < 0)
{
j++;
}
else if (sum > 0)
{
k--;
}
else
{
value[0] = arr[i];
value[1] = arr[j];
value[2] = arr[k];
result.insert(value);
j++;
k--;
}
}
}
return result;
}