题目
leetcode15 三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:
输入:nums = []
输出:[]
示例 3:
输入:nums = [0]
输出:[]
提示:
0 <= nums.length <= 3000
-105 <= nums[i] <= 105
代码
- 思路
- 排序+双指针
- 代码
// C++
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
if (nums.size() < 3){
return res;
}
// 排序
sort(nums.begin(), nums.end());
auto base_it = nums.begin();
while(base_it < nums.end()){
// 双指针
auto first_it = base_it + 1;
auto second_it = nums.end() -1;
while(first_it < second_it){
int temp = *base_it + *first_it + *second_it;
if (temp > 0){
--second_it;
}
else if (temp < 0){
++first_it;
}
else{
vector<int> item{*base_it, *first_it, *second_it};
res.emplace_back(item);
int first_val = *first_it;
do{
++first_it;
}while((first_it < second_it) && (*first_it == first_val));
}
}
int base_val = *base_it;
do{
++base_it;
}
while((base_it < nums.end()) && (*base_it == base_val));
}
return res;
}
};