15. 3Sum
来源:互联网 发布:天下3 知乎 编辑:程序博客网 时间:2024/06/06 14:15
原题目:
15. 3Sum
读题:
任意三个数相加为0,但是不能是相同的三元组
解题思路:
先排序,然后遍历序列,如果遇到相同的数则跳过,指定一个num[i]后,剩下的就是要找到另外两个数A+B=-num[i],可以采用二分查找,begin = i+1;end = len -1;依次查找可以得到,以下是AC代码
class Solution {public:vector<vector<int>> threeSum(vector<int>& nums) {int i,j,k;int sum,begin,end;vector <vector<int>> result;int length = nums.size();if(length < 3){return result;}sort(nums.begin(),nums.end());for(i=0;i<length;i++){if(nums[i]>0){break;}if( i > 0 && nums[i] == nums[i-1]){continue;}begin = i+1;end = length-1;while(begin < end){sum = nums[i] + nums[begin] + nums[end];if (0 == sum){vector <int> temp;temp.push_back(nums[i]);temp.push_back(nums[begin]);temp.push_back(nums[end]);result.push_back(temp);begin++;end--;while(begin < end &&nums[begin] == nums[begin-1]) {begin++;}while(begin < end &&nums[end] == nums[end+1]) {end--;}}else if(sum>0){end--;}else {begin++;}}}return result;}};int main(){Solution s;int i,j;vector <vector <int>> result;vector <int> v;v.push_back(-1);v.push_back(0);v.push_back(1);v.push_back(2);v.push_back(-1);v.push_back(-4);result = s.threeSum(v);for(i=0;i<result.size();i++){for(j=0;j<result[i].size();j++){cout<<result[i][j]<<endl;}}}
阅读全文
0 0
- 15. 3Sum && 16 sum closet && 18 4sum
- 15. 3Sum 和 18. 4Sum
- 1. Two Sum&15. 3Sum
- LeetCode 15. 3Sum
- LeetCode --- 15. 3Sum
- [Leetcode] 15. 3Sum
- 【LeetCode】15. 3Sum
- 15. 3Sum
- 【leetcode】15. 3sum
- 【leetcode】15. 3Sum
- 15. 3Sum
- [leetcode] 15. 3Sum
- 15. 3Sum
- 15. 3Sum
- 15. 3Sum
- 15. 3Sum
- 15. 3Sum
- leetcode 15. 3Sum
- 【学习整理】天基移动通信网络
- StringUtils--字符串工具类
- Android项目eclipse导入发生的问题
- 第一份博客
- GKVoronoiNoiseSource
- 15. 3Sum
- 使用MapReduse 处理 SequenceFile
- mybatis实战教程(mybatis in action),mybatis入门到精通
- LwIP裸机ping问题
- Maven下载、安装和配置(一)
- 以Point类为基础,定义一个平面中的Circle类: 1、编写一个无参的构造函数; 2、编写一个有参的构造函数; 3、在主函数中调用无参的构造函数生成圆的实例c1,调用有参的构造函数生成圆的实例c2
- qnx的ssh功能配置,nfs配置,scp配置,telnet配置
- c++ 左值、右值、左值引用和右值引用
- poj 3415 后缀数组+单调栈||后缀自动机