3sum
2015-06-29 10:29
239 查看
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
•Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
•The solution set must not contain duplicate triplets.
Note:
•Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
•The solution set must not contain duplicate triplets.
For example, given array S = {-1 0 1 2 -1 -4}, A solution set is: (-1, 0, 1) (-1, -1, 2)
class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<vector<int>> ret; for(int i = 0;i < nums.size();i++) { int start = i+1; int end = nums.size()-1; if(i>0&&nums[i]==nums[i-1])//关键点1:去除已经重复的点 continue; while(start<end)//转化为2sum问题 { while(start>i+1&&nums[start]==nums[start-1])//关键点2:排除重复的部分 { start++; } while(end<nums.size()-1&&nums[end]==nums[end+1]) { end--; } int sum = nums[start]+nums[i]+nums[end]; if(start<end) { if(sum == 0) { vector<int> temp; temp.push_back(nums[i]); temp.push_back(nums[start]); temp.push_back(nums[end]); ret.push_back(temp); start++; }else if(sum>0) { end--; }else{ start++; } } } } return ret; } };
相关文章推荐
- 修复 VirtualBox 下 Ubuntu 14.10 屏幕分辨率问题
- insmod: error inserting 'simp-blkdev.ko': -1 Invalid module format
- Vc++ 控件List Control用法总结
- yii使用CArrayDataProvider进行数组分页
- DHCP服务器搭建与管理
- 皕杰报表数据集调用存储过程
- 日经春秋 20150629
- poj 3241 Object Clustering 曼哈顿最小生成树
- 浅析:android的apk文件上线前加密和签名经验分享
- java实现N元一次方程组求解
- [LeetCode] Remove Nth Node From End of List 移除链表倒数第N个节点
- 让我们一起Go(十二)
- 让我们一起Go(十三)
- KVO 小探
- 如何让iOS模拟器也能测试蓝牙4.0程序?
- JavaScript模拟实现键盘打字效果
- Android Activity切换动画(解决back键后退失效问题)
- error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMT.
- 程序员是否只是”青春饭”一种概念
- 通过VMware Fusion将 Mac 中的文件夹共享到虚拟机