/**********************************************************************************
**description:给定一个无序数组,要求返回数组中三个元素相加等于零的所有三元素组合
** 要求:三个元素从小到大排列;不能返回重复的三元素组合
** 如:Input: a={-1 0 1 2 -1 -4} Output: (-1, 0, 1), (-1, -1, 2)
**********************************************************************************/
//先排序,然后对有序数组遍历,内层夹逼。
//时间复杂度O(n^2),空间复杂度O(1)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<vector<int>> threeSum(vector<int> &arr)
{
vector<vector<int>> result;
if (arr.size() < 3)
return result;
sort(arr.begin(), arr.end());
for (int i = 0; i < arr.size() - 2; i++)
{
if (i > 0 && arr[i] == arr[i - 1])
continue;
int m = i + 1;
int n = arr.size() - 1;
while (m < n)
{
if (arr[i] + arr[m] + arr[n] < 0)
m++;
else if (arr[i] + arr[m] + arr[n] > 0)
n--;
else
{
vector<int> group;
group.push_back(arr[i]);
group.push_back(arr[m]);
group.push_back(arr[n]);
result.push_back(group);
m++;n--;
while (arr[m] == arr[m - 1] )
m++;
}
}
}
return result;
}
求无序数组中三元素相加等于特定值的所有情况
最新推荐文章于 2022-09-26 23:58:25 发布