leetcode 416 Partition Equal Subset Sum

题目详情

Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.

题目的意思是输入一个非空的、只含正整数的数组nums,要求咱们判断,数组nums可否被分红两个子数组,知足两个子数组的和相等。数组

例1:
输入: [1, 5, 11, 5]
输出: true
解释: 输入数组能够被分为[1, 5, 5]和[11].
例2:
输入: [1, 2, 3, 5]
输出: false
解释: 数组没法被拆分红两个和相等的子数组.code

想法

  • 首先咱们须要遍历一趟获得整个数组的和sum,从而求出每一个子数组元素的加和(sum/2)。
  • 若是sum是奇数的话,那必定是不知足条件的,能够直接返回false。若是sum是偶数,将sum除2得到咱们要求的一个子数组元素的和。
  • 如何暂存咱们计算的中间结果呢?
  • 声明一个长度为sum+1的布尔值数组res。每一个元素的布尔值res[i]表明着,数组中是否存在知足加和为i的元素序列。
  • 对于每个元素,咱们都要求出他以及前面遍历过的元素所组合出的元素和。
public boolean canPartition(int[] nums) {
        int sum = 0;
        for(int num : nums){
            sum += num;
        }
        if(sum % 2 != 0)return false;
        sum /= 2;
        
        boolean[] res  = new boolean[sum+1]; 
        int length = nums.length;
        
        res[0] = true;
        
        for(int i=1;i<=length;i++){
            for(int j=sum;j>=nums[i-1];j--){
                res[j] = res[j-nums[i-1]] || res[j];
            }
        }
        
        return res[sum];
    }
相关文章
相关标签/搜索