给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
先排序加上遍历双指针,复杂度O(nlgn)+O(n^2).注意去重.
vector<vector<int>> threeSum(vector<int>& nums) //三数之和
{
vector <int>temp = nums;
vector<vector<int>> res;
if (nums.size() < 3)
{
return res;
}
sort(temp.begin(), temp.end());
for (int i = 0; i < temp.size() - 2; i++)
{
if (i != 0 && temp[i] == temp[i - 1])//去除i相等的
{
continue;
}
int j = i + 1, k = temp.size() - 1;
while (j < k)//双指针
{
if (temp[j] + temp[i] + temp[k] == 0)
{
vector <int> temp_in;
temp_in.push_back(temp[i]);
temp_in.push_back(temp[j]);
temp_in.push_back(temp[k]);
res.push_back(temp_in);
j++;
k--;
while (j < temp.size() && temp[j] == temp[j - 1])//去除j中相等的
j++;
}
else if (temp[i] + temp[j] + temp[k] < 0)
{
j++;
}
else
{
k--;
}
}
}
return res;
}