码迷,mamicode.com
首页 > 其他好文 > 详细

刷题416. Partition Equal Subset Sum

时间:2020-04-22 09:29:08      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:mis   ssi   false   部分   iss   return   说明   递归算法   public   

一、题目说明

题目416. Partition Equal Subset Sum,给定一个只包含正整数的数组,判断数组能否分成2个子数组,且其和相等。难度是Medium!

二、我的解答

这个题目,类似背包问题,用递归算法可解。但是需要先降序排序。

class Solution{
	public:
		bool canPartition(vector<int>& nums){
			int sum = 0;
			int len = nums.size();
			
			for(int i=0;i<len;i++){
				sum += nums[i];
			}
			
			//如果和是奇数,不能分成2部分 
			if(sum%2 !=0) return false;
			
			sort(nums.begin(),nums.end(),greater<int>());
			
			sum = sum/2;
			return dfs(nums,sum,0);
		}
		bool dfs(vector<int>& nums,int sum,int index){
			if(index >= nums.size() || nums[index] > sum){
				return false;
			}
			if(nums[index] == sum){
				return true;
			}
			return dfs(nums,sum-nums[index],index+1) || dfs(nums,sum,index+1);
		}		 
};

性能如下:

Runtime: 0 ms, faster than 100.00% of C++ online submissions for Partition Equal Subset Sum.
Memory Usage: 8.5 MB, less than 76.47% of C++ online submissions for Partition Equal Subset Sum.

三、优化措施

刷题416. Partition Equal Subset Sum

标签:mis   ssi   false   部分   iss   return   说明   递归算法   public   

原文地址:https://www.cnblogs.com/siweihz/p/12323351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!