Partition Equal Subset Sum解题报告
2017-12-17 17:57
337 查看
题目链接https://leetcode.com/problems/partition-equal-subset-sum/description/
题目描述如下
题目大意是要判断一个正整数数组是否可以分成和相等的两部分
我的想法是:
c++代码如下:
复杂度是O(2n)的,不过这个算法在leetcode的测试数据集下收敛较快,所以3ms通过了测试。
题目描述如下
Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. Note: Each of the array element will not exceed 100. The array size will not exceed 200. Example 1: Input: [1, 5, 11, 5] Output: true Explanation: The array can be partitioned as [1, 5, 5] and [11]. Example 2: Input: [1, 2, 3, 5] Output: false Explanation: The array cannot be partitioned into equal sum subsets.
题目大意是要判断一个正整数数组是否可以分成和相等的两部分
我的想法是:
step1: 判断数组的和(sum)是否是偶数,只有偶数才可分 step2: 求出和的一半(n),若n小于数组最大值,则不可分 step3: 从数组最后一个数开始,判断包含或不包含当前元素的子集是否求和得n,这里用到递归的算法。
c++代码如下:
class Solution { public: bool canPartition(vector<int>& nums){ int len = nums.size(); int sum = 0; int n = 0; for(int i = 0; i < len; i++){ sum += nums[i]; } if(sum % 2 != 0) { < 4000 span class="hljs-keyword">return false; } n = sum / 2; sort(nums.begin(),nums.end()); if(n < nums[len-1]){ return false; } return find(nums, len - 1, n); } bool find(vector<int>& nums, int end, int sum){ if(sum == 0){ return true; } if(sum < 0){ return false; } if(end == 0){ if(sum != nums[0]){ return false; } return true; }else{ return find(nums, end-1, sum - nums[end]) || find(nums, end-1, sum); } } };
复杂度是O(2n)的,不过这个算法在leetcode的测试数据集下收敛较快,所以3ms通过了测试。
相关文章推荐
- Leetcode 416. Partition Equal Subset Sum 对半分 解题报告【修正版】
- leetcode解题之416#Partition Equal Subset SumJava版. 对半分(0-1背包,动态规划)
- week8- Dynamic Programming-NO.416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- [LeetCode] Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- leetCode No.416 Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- LeetCode—— Partition Equal Subset Sum
- leetcode--- Partition Equal Subset Sum---动规
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- [LeetCode416]Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- Partition Equal Subset Sum
- [LeetCode] Partition Equal Subset Sum划分数组形成两个和相等的子集