您的位置:首页 > 编程语言 > C语言/C++

【每日打卡】Day27:三数之和 C++实现

2019-05-20 00:35 337 查看

给定一个包含 n 个整数的数组 

nums
,判断 
nums
 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]

思路和代码:首先对数组进行排序,先确定中间值,然后使用双指针,从0和nums.size()-1开始依次夹击扫描。

[code]class Solution {
public:
set<vector<int>> ans;
vector<vector<int>> threeSum(vector<int>& nums) {
if(nums.size() < 3) return {};
int sum = 0;
sort(nums.begin(),nums.end());
for(int c = 1, l, r; c < nums.size() - 1; c ++){
l = 0;
r = nums.size() - 1;
while(l < c && r > c){
sum = nums[l] + nums[c] + nums[r];
if(sum == 0){
ans.insert({nums[l],nums[c],nums[r]});
r--;
if(nums[l] == nums[r]) break;
}
else if(sum < 0)    l++;
else if(sum > 0)    r--;
}
}
return vector<vector<int>>(ans.begin(),ans.end());
}
};

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: