zoukankan      html  css  js  c++  java
  • LeetCode#416-分割等和子集

    package dp;
    /*
    416. 分割等和子集
    给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
    
    注意:
    
    每个数组中的元素不会超过 100
    数组的大小不会超过 200
    示例 1:
    
    输入: [1, 5, 11, 5]
    
    输出: true
    
    解释: 数组可以分割成 [1, 5, 5] 和 [11].
    
    
    示例 2:
    
    输入: [1, 2, 3, 5]
    
    输出: false
    
    解释: 数组不能分割成两个元素和相等的子集.
     */
    public class p416 {
        public static boolean canPartition(int[] nums) {
            if(nums.length<2||nums==null)return false;
            int Sum=0,target;
            for(int i:nums ){
                Sum+=i;
            }
            if(Sum%2!=0)return false;
            target=Sum/2;
            boolean dp[][]=new boolean[nums.length][target+1];
            dp[0][0]=true;
            if(nums[0]<=target){
                dp[0][nums[0]]=true;
            }
            for(int i=1;i<nums.length;i++){
                for(int j=0;j<=target;j++){
                    dp[i][j]=dp[i-1][j];
                    if (nums[i] == j) {
                        dp[i][j] = true;
                        continue;
                    }
                    if(j>nums[i]){
                        dp[i][j]=dp[i-1][j]||dp[i-1][j-nums[i]];
                    }
                }
                if(dp[i][target])return true;
            }
            return dp[nums.length-1][target];
    
        }
    
        public static void main(String[] args) {
            int nums[]={1,5,11,5};
            System.out.println(canPartition(nums));
        }
    }
    

      运行结果:

  • 相关阅读:
    docker知识集锦
    kubernetes知识集锦
    redis知识集锦
    Java多线程知识集锦
    vscode离线安装插件
    jsoncpp的简易教程
    为什么要自动化测试?
    如何选择正确的自动化测试工具
    如何选择测试自动化工具?
    测试自动化的五大挑战
  • 原文地址:https://www.cnblogs.com/jifeng0902/p/13639716.html
Copyright © 2011-2022 走看看