【leetcode】18. 4Sum
2016-05-23 16:49
232 查看
/** * Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? * Find all unique quadruplets in the array which gives the sum of target. * Note: * Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d) * The solution set must not contain duplicate quadruplets. * For example, given array S = {1 0 -1 0 -2 2}, and target = 0. * * A solution set is: * (-1, 0, 0, 1) * (-2, -1, 1, 2) * (-2, 0, 0, 2) */ #include <iostream> #include <string> #include <vector> #include <set> #include <algorithm> using namespace std; vector<vector<int>> findNum(vector<int>& nums, int begin, int count, int target) { vector<vector<int>> rs; set<int> visited; int len = nums.size(); if (count == 2) { int l = begin, r = len - 1; vector<int> tmp; int sum = 0; while (l < r) { sum = nums[l] + nums[r]; if (sum == target && visited.find(nums[l]) == visited.end()) { tmp.clear(); tmp.push_back(nums[l]); tmp.push_back(nums[r]); visited.insert(nums[l]); visited.insert(nums[r]); rs.push_back(tmp); l++; r--; } else if (sum < target) l++; else r--; } } else { vector<vector<int>> sub; for (int i = begin; i < len; i++) { if (visited.find(nums[i]) == visited.end()) { visited.insert(nums[i]); sub = findNum(nums, i + 1, count - 1, target - nums[i]); if (!sub.empty()) { for (int j = 0; j < sub.size(); j++) { sub[j].push_back(nums[i]); rs.push_back(sub[j]); } } sub.clear(); } } } return rs; } vector<vector<int>> threeSum1(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); return findNum(nums, 0, 3, target); } vector<vector<int>> fourSum(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); return findNum(nums, 0, 4, target); } int main() { vector<int> nums = { 1, 0, -1, 0, -2, 2 }; vector<vector<int>> rs = fourSum(nums, 0); 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; }
相关文档
2Sum3Sum
相关文章推荐
- 记录一些小技巧
- winform学习之-----页面设计-20160523
- Windows Server 2012 新特性:IPAM的配置
- centos7安装mariadb
- android Imageview中图片变成灰色的方法
- 安装mysql-5.7.xx-winx64.zip
- log4j的使用
- java 字符串缓冲池 String缓冲池
- Web前端优化最佳实践及工具集锦
- 解析串口-接收完整数据帧
- Java 协变数组和类型擦除(covariant array & type erasure)
- JAVA基础教程6:运行时类型识别(RTTI)
- python正则表达式
- 自定义android折线图,实现左右滑动和快速滑动
- TableCell 中label的旋转
- TCP/IP,udp,socket
- 详解JavaScript中|单竖杠运算符的使用方法
- 打不死的小强--双进程守护
- mybatis 关联查询
- Oracle 11gR2 installation for CentOS 7