【每日打卡】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()); } };
相关文章推荐
- 【每日打卡】Day28:最接近的三数之和 C++实现
- [CodeProject每日一荐]实现Double Metaphone语音匹配算法[一]:介绍与C++实现
- 每日进步之leetcode第16题C++实现代码(
- LeetCode- 16. 最接近的三数之和 (Medium)python和c++实现
- 基于JavaScript实现每日签到打卡轨迹功能
- 每日进步之leetcode15题C++实现代码
- 每日一个算法------二叉树实现、递归和非递归算法(c++版)
- [CodeProject每日一荐] 两个C++实现的MSN Messenger弹出窗口风格的窗体
- 基于JavaScript实现每日签到打卡轨迹功能
- 【每日一题-16】重建二叉树&C模拟实现C++继承多态
- C++调用Java(借助JNI技术实现每日登陆的实现)
- 每日进步之leetcode第1题C++实现代码
- C++多态的实现原理
- 单例模式C++实现
- C/C++:各种基本算法实现小结(七)—— 常用算法
- 石头剪刀布c++实现
- C++实现一个不能继承的类
- 大话设计模式--策略模式 strategy -- C++实现实例
- c++快速排序的实现
- C++ 采集音频流(PCM裸流)实现录音功能