zoukankan      html  css  js  c++  java
  • 刷题416. Partition Equal Subset Sum

    一、题目说明

    题目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.
    

    三、优化措施

    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    Cf序列化器-Serializer解析
    yield和return
    pymongo的使用
    Homebrew介绍和使用
    TypeError: expected string or bytes-like object
    JavaScript读取文本,并渲染在html
    反序相等
    打印邮票的组合
    打印对称平方数
    字符串按照原意输出
  • 原文地址:https://www.cnblogs.com/siweihz/p/12323351.html
Copyright © 2011-2022 走看看