• Leetcode 416.分割等和子集


    分割等和子集

    给定一个只包含正整数非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

    注意:

    1. 每个数组中的元素不会超过 100
    2. 数组的大小不会超过 200

    示例 1:

    输入: [1, 5, 11, 5]

    输出: true

    解释: 数组可以分割成 [1, 5, 5] 和 [11].

       

    示例 2:

    输入: [1, 2, 3, 5]

    输出: false

    解释: 数组不能分割成两个元素和相等的子集.

    用动态规划,即将每次遍历到的数的放入和不放入结果集合的状态都存起来。有点像背包问题,每次放或者不放一个数进去都会影响以后是否能放入未来的数。

     1 class Solution {
     2     public boolean canPartition(int[] nums) {
     3         int sum=0;
     4         for(int num:nums){
     5             sum+=num;
     6         }
     7         if((sum&1)==1) return false;
     8         sum>>=1;
     9         boolean[] dp=new boolean[sum+1];
    10         dp[0]=true;
    11         for(int j=0;j<nums.length;j++){
    12             for(int i=sum;i>=nums[j];i--){
    13                 dp[i]=dp[i]||dp[i-nums[j]];
    14             }
    15             if(dp[sum]){
    16                 return true;
    17             }
    18         }
    19         return dp[sum];
    20     }
    21 }
  • 相关阅读:
    如何生成随机数
    2017新数组
    JAVA基础
    java基本数据类型
    简易图片自动轮播
    JDK,JRE,JVM
    年月日 日期选择问题
    多选按钮选中进行下一步
    js基本函数和基本方法
    数组简单应用
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10242210.html
Copyright © 2020-2023  润新知