【leetcode】15. 3Sum
2016-05-20 17:49
453 查看
/** * 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. * For example, given array S = {-1 0 1 2 -1 -4}, * * A solution set is: * (-1, 0, 1) * (-1, -1, 2) */ #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; //利用之前的twosum,改写一下 vector<vector<int>> twoSum2(vector<int>& nums, int target, int index) { vector<vector<int>> rs; vector<int> r(2, 0); int s = 0; int e = nums.size() - 1; for (int i = index; i < e;) { s = (nums[i] + nums[e]); if (s == target) { r[0] = nums[i]; r[1] = nums[e]; rs.push_back(r); i++; e--; } else if (s < target) i++; else e--; } return rs; } vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> rs; int len = nums.size(); if (len < 3) return rs; vector<vector<int>> tmp; for (int i = 0; i < len - 2; i++) { if (nums[i] == nums[i + 1]) continue; tmp = twoSum2(nums, 0 - nums[i], i); if (!tmp.empty()) { for (int j = 0; j < tmp.size(); j++) { tmp[j].push_back(nums[i]); rs.push_back(tmp[j]); } tmp.clear(); } } return rs; } int main() { vector<int> nums = {-1, 0, 1, 2, -1, -4}; sort(nums.begin(), nums.end()); vector<vector<int>> rs; rs = threeSum(nums); for (int i = 0; i < rs.size(); i++) { for (int j = 0; j < rs[i].size(); j++) { cout << rs[i][j] << " "; } cout << endl; } system("pause"); return 0; }
相关文档
twoSum相关文章推荐
- 关于搜狗输入法的评价
- UIWebView-JSContext实现OC与JS交互
- iOS-将像素绘制到屏幕上
- PHP开发者应了解的24个库
- php 在原有xml文件中追加节点
- MVC3+AutoFac实现程序集级别的依赖注入
- CentOS 上snmp的安装和配置
- 8 个必备的PHP功能开发
- iOS 面试题~愿所有移动开发者熬过寒冬
- CodeForces 66A Petya and Java
- Wonderware配置-Intouch读取数据 6
- C++Lambda学习
- HTML+CSS基础(五):表单标签,与用户交互
- 跨模块调用
- OC下载网络数据简介
- Toast动态显示信息
- IOS开发中返回值为null时的处理
- UGUI ScrollRect完美使用
- 手机传感器大科普:手机中的陀螺仪、加速器和磁力计
- web前端中calc属性案例详解