zoukankan      html  css  js  c++  java
  • leetcode 416. 分割等和子集 java

    题目:

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

    注意:

    每个数组中的元素不会超过 100
    数组的大小不会超过 200
    示例 1:

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

    输出: true

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

    示例 2:

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

    输出: false

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

    解题:

    将数组能形成的和转换成0-1背包问题

    class Solution {
        public boolean canPartition(int[] nums) {
            if (nums == null || nums.length == 0) {
                return false;
            }
    
            int sum = 0;
            for (int num : nums) {
                sum += num;
            }
            if (sum % 2 != 0) {
                return false;
            }
            sum = sum / 2;
            boolean[] res = new boolean[sum + 1];
            res[0] = true;
            for (int num : nums) {
                for (int i = sum; i >= num; i--) {
                    res[i] = res[i] || res[i - num];
                }
            }
    
            return res[sum];
        }
    }
  • 相关阅读:
    ASP.NET使用SWFUpload上传大文件教学
    Gridview自定义分页(转载)
    扩展GridView之个性分页(转载)
    畅通工程
    一个人的旅行
    Stockbroker Grapevine
    Arbitrage
    More is better
    HDU Today
    Minimum Transport Cost
  • 原文地址:https://www.cnblogs.com/yanhowever/p/11738877.html
Copyright © 2011-2022 走看看