leetcode 15. 3Sum
2016-02-24 22:46
169 查看
题意
查找三个相加为0的数,且不重复。题解
将数组排序后,枚举两个不重复的元素A和B,然后二分查找剩余-(A+B)。代码
class Solution { public: int binary_search(vector<int>& nums, int left, int right, int target) { while (left <= right) { int mid = (left + right) / 2; if (nums[mid] > target) right = mid - 1; else if (nums[mid] < target) left = mid + 1; else return mid; } return -1; } int skip(vector<int>& nums, int i) { int size = nums.size(); while (i > 0 && i < size && nums[i] == nums[i - 1]) i++; return i; } vector<vector<int> > threeSum(vector<int>& nums) { set<vector<int> > result_set; vector<vector<int> > result; int size = nums.size(); sort(nums.begin(), nums.end()); for (int i = 0; i < size; i++) { i = skip(nums, i); for (int j = i + 1; j < size; j++) { int twoSum = nums[i] + nums[j]; int index = -1; if ((index = binary_search(nums, j + 1, size - 1, -twoSum)) >= 0) { vector<int> temp; temp.push_back(nums[i]); temp.push_back(nums[j]); temp.push_back(nums[index]); result.push_back(temp); while (j > 0 && j < size - 1 && nums[j] == nums[j + 1]) // skip the repeated eles j++; } } } return result; } };
相关文章推荐
- python(3)-集合
- 关于在for循环中绑定事件打印变量i是最后一次。
- SOCket和UDP和TCP的区别
- 《Android源码设计模式》读书笔记 (18) 第18章 代理模式
- GDKOI2016赛后总结(比赛做题策略)
- 最新 Sublime Text3 激活码 (Build 3103 有效)
- C#Winform向数据库中导入.txt或者.CSV文件的数据
- cocos2dx shader分析之CCGLProgram
- 单点登录(SSO)
- css媒体查询
- SVN Client
- java static代码段
- 内部类与zip操作
- 代码编辑器Sublime Text
- Android的LayoutInflater和findViewById()的详解
- Android ActivityGroup
- 打开Android C文件中的LOG
- kali linux 安装 Nessus
- 《 linux后台开发必看书》
- 关于使用VBO渲染