概述
题目链接https://leetcode.com/problems/partition-equal-subset-sum/description/
题目描述如下
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) {
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通过了测试。
最后
以上就是英俊指甲油为你收集整理的Partition Equal Subset Sum解题报告的全部内容,希望文章能够帮你解决Partition Equal Subset Sum解题报告所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复