[LeetCode] Partition to K Equal Sum Subsets
来源:互联网 发布:java 线程状态 编辑:程序博客网 时间:2024/05/21 01:42
题目
分析
这题虽然归在DP里面,但是最后其实用的是dfs进行求解的。因为这题看起来如果使用dfs会更加的直观,和之前的combination sum2之类的其实会比较相似。
这题的关键问题在于超时了,我也不明白为什么会超时,但是最后我把sort那部分给去掉就没问题了,但是这部分只是O(logN),可能是因为排序之后会导致找的这个过程变慢,反而是无序的更容易找到问题的解。
时间复杂度分析
时间复杂度,由于只是DFS,而且是一个无向图,所以时间复杂度应该是O(
代码
其中count是用来避免k == 0 的特殊情况的
#include <iostream>#include <vector>using namespace std;class Solution {public: bool canPartitionKSubsets(vector<int>& nums, int k) { // special cases if (k == 1) return true; if (nums.size() < k) return false; int sum = 0; for (int i = 0; i < nums.size(); i++) sum += nums[i]; if (sum % k != 0) return false; subsetSum = sum / k; visit = vector<bool>(nums.size(), false); this->size = nums.size(); this->_nums = nums; return dfs(0, 0, k, 0); } bool dfs(int startIndex, int sum, int remainder, int count) { // if only remain 1 subset, it can always be divided if (remainder == 1) return true; // successfully divede a subset and begin a recursive divide if (sum == subsetSum && count > 0) return dfs(0, 0, remainder -1, 0); for (int i = startIndex; i < size; i++) { if (!visit[i] && sum + _nums[i] <= subsetSum) { visit[i] = true; if (dfs(i+1, sum + _nums[i], remainder, count+1)) return true; visit[i] = false; } } return false; } vector<bool> visit; vector<int> _nums; int subsetSum; int size;};
阅读全文
0 0
- Leetcode | Partition to K Equal Sum Subsets
- [LeetCode] Partition to K Equal Sum Subsets
- leetcode-698-Partition to K Equal Sum Subsets
- LeetCode #698 Partition to K Equal Sum Subsets
- leetcode 698. Partition to K Equal Sum Subsets
- Leetcode: 698. Partition to K Equal Sum Subsets
- leetcode-698. Partition to K Equal Sum Subsets
- leetcode 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- Partition to K Equal Sum Subsets
- subsets/subsets II/Partition Equal Subset Sum/Partition to K Equal Sum Subsets
- leetcode 698. Partition to K Equal Sum Subsets(记忆化搜索/状压dp)
- 面向对象
- Java虚拟机知识介绍(一)
- 大数据算法导论第二周
- 将证件信息转化为文字的移动端证件识别
- 放苹果
- [LeetCode] Partition to K Equal Sum Subsets
- 选择排序之简单选择排序
- 2017-11-19周总结
- android studio 将引用第三方jar和.so的项目打包jar并混淆
- Treasure Exploration
- 剑指Offer 面试题19:正则表达式匹配 Java代码实现
- Swift4.0 --- setValuesForKeys() 无法赋值问题
- NOIP2017翻车记
- Drools7.5.0教程(3)-workbench安装