0
点赞
收藏
分享

微信扫一扫

LeetCode 416. 分割等和子集

萧让听雪 2022-04-13 阅读 84

LeetCode 416. 分割等和子集

文章目录

题目描述

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
示例 1:
输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5] 和 [11] 。

LeetCode 416. 分割等和子集
提示:


    1 <= nums.length <= 200
    1 <= nums[i] <= 100

一、解题关键词


二、解题报告

1.思路分析

2.时间复杂度

3.代码示例

package com.datao.arithmetic;

public class CanPartition {
    
        public boolean canPartition(int[] nums) {
            int len = nums.length;
            if(len < 2){return false;}
            int sum = 0,maxNum = 0;

            for(int num: nums){
                sum +=num;
                maxNum = Math.max(maxNum,num);
            }
            if(sum % 2 != 0){
                return false;
            }
            int target = sum / 2;

            if(maxNum > target){
                return false;
            }
            boolean [][] dp = new boolean[len][target + 1];

            for(int i  = 0;i <len;i++){
                dp[i][0] = true;
            }
            dp[0][nums[0]] = true;

            for(int i= 1; i< len; i++){
                int num = nums[i];
                for(int j = 1;j <= target;j++){
                    if( j >=num){
                        dp[i][j]  = dp[i - 1][j] | dp[i - 1][j - num];
                    }else{
                        dp[i][j] = dp[i - 1][j];
                    }
                }
            }
            return dp[len - 1][ target];
    }
}

2.知识点



总结

举报

相关推荐

0 条评论