• 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 }
  • 相关阅读:
    搭建zabbix监控
    liunx 下ctrl+D问题解决方案
    linux配置双线策略
    Discuz! X2.5读写分离
    慢谈MYSQL常用SQL语句
    CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境
    自动抓包shell脚本
    zabbix实施部署原理架构
    ftp搭建教程
    DNS搭建教程
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10242210.html
Copyright © 2020-2023  润新知