leetcode 18: 4Sum (KSum)
来源:互联网 发布:linux中cat命令详解 编辑:程序博客网 时间:2024/05/16 19:52
问题描述:
给定一个整形数组 nums[], 一个整形目标值target。从数组nums[]中找到k个数,满足这k个数之和为target,找到所有这样的组合,相同的组合只能出现一次。
本文致力于寻找一个通用的方法来解决KSUM问题。参考文章http://www.sigmainfy.com/blog/4sum-problem-analysis-different-time-complexity.html,在此对作者表示感谢
以下为代码用C++是实现,本代码在leetcode 18: 4sum上为Accepted,但运行时间较长,望大家见谅。
class Solution {public: vector<vector<int>> findZeroSumInSortedArr(vector<int>& nums, vector<int>::size_type begin, int count, int target) { vector<vector<int>> ret; if (count == 2) { vector<int>::size_type left = begin; vector<int>::size_type right = nums.size() - 1; vector<int> tuple(2, 0); while (left < right) { if (nums[left] + nums[right] < target) { left++; } else if (nums[left] + nums[right] > target) { right--; } else { tuple[0] = nums[left]; tuple[1] = nums[right]; //去除完全相同的二元组 if (ret.empty() || tuple != *(ret.end() - 1)) { ret.push_back(tuple); } left++; right--; } } return ret; } else { int curValue = nums[begin]; //去除第一个整数相同的组合 for (vector<int>::size_type ix = begin; ix < nums.size() - count + 1; ix++) { if (ix > begin && curValue == nums[ix]) { continue; } int newTarget = target - nums[ix]; vector<vector<int>> subRet = findZeroSumInSortedArr(nums, ix + 1, count - 1, newTarget); vector<int> tuple; for (vector<vector<int>>::iterator iter = subRet.begin(); iter != subRet.end(); iter++) { tuple.clear(); tuple.push_back(nums[ix]); for (vector<int>::iterator subIter = (*iter).begin(); subIter != (*iter).end(); subIter++) { tuple.push_back(*subIter); } ret.push_back(tuple); } curValue = nums[ix]; } return ret; } } vector<vector<int>> fourSum(vector<int>& nums, int target) { sort(nums.begin(), nums.end(), less<int>()); vector<vector<int>> ret; if (nums.size() < 4) return ret; return findZeroSumInSortedArr(nums, 0, 4, target); }};
0 0
- leetcode-18 4Sum(kSum)
- leetcode 18: 4Sum (KSum)
- LeetCode-18-4Sum(证明/KSum)-Medium
- LeetCode(3 Sum, 4sum, ksum)
- [C++]LeetCode: 71 4Sum && kSum总结
- leetcode 18. 4Sum KSum的解决办法
- leetcode - 3Sum ( kSum )
- leetcode--ksum问题--3sum
- 【Ksum】求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
- [Leetcode][求和问题2Sum/3Sum/4Sum/KSum]相关题目汇总/分析/总结
- leetcode - 3Sum Closest (kSum Closest)
- LeetCode-15-3Sum(证明/KSum)-Medium
- LeetCode 求和问题总结(2sum,3sum,ksum)
- LeetCode-16-3Sum Closest(证明/KSum)-Medium
- 15.leetcode 3Sum(medium)[排序 查找 Ksum问题]
- leetcode-1-15-16-18-Ksum
- LeetCode总结 -- kSum篇
- LeetCode总结 -- kSum篇
- JAVA中的常量定义在class中还是interface中比较合理?
- python3爬虫之旅
- HDU-2870-Largest Submatrix(DP)
- 整数转16进制字符串,不用系统函数
- JDK + eclipse mars + CDT + PyDev
- leetcode 18: 4Sum (KSum)
- android常见错误
- 时过境迁,物是人非。
- xshell的快捷键(非常实用)
- 谷歌电子市场第1天
- 思特沃克作业
- javascript学习笔记--(初级)js文件介绍
- RMQ算法
- 瀑布流布局 – 学成