【leetcode】18. 4Sum
来源:互联网 发布:人像素描书 知乎 编辑:程序博客网 时间:2024/05/16 13:54
/** * 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;}
相关文档
2Sum
3Sum
0 0
- LeetCode --- 18. 4Sum
- [Leetcode] 18. 4Sum
- leetcode 18. 4Sum
- 18. 4Sum LeetCode
- leetcode 18. 4Sum
- 【LeetCode】18. 4Sum
- LeetCode - 18. 4Sum
- leetcode 18. 4Sum
- Leetcode 18. 4Sum
- LeetCode 18. 4Sum
- 【leetcode】18. 4Sum
- leetcode 18. 4Sum
- [leetcode]18. 4Sum
- leetcode 18. 4Sum
- leetcode 18. 4Sum
- leetcode 18. 4Sum
- [LeetCode] 18. 4Sum
- LeetCode 18. 4Sum
- 关于FragmentTabHost如何决定导航栏的位置
- android Imageview中图片变成灰色的方法
- 二维数组的遍历(简单实验)
- hdu 5698 组合数
- Android动画-View Animation--alpha、translate、scale、rotate
- 【leetcode】18. 4Sum
- You can Solve a Geometry Problem too----判断两线段是否相交
- 数据库sharding和一致性哈希算法
- android 解决输入法键盘遮盖布局问题
- 123
- 你需要知道的Android拍照适配方案
- Mysql彻底卸载
- linux中strcpy、memcpy的用法与区别
- 用友写狗工具 过狗补丁