当前位置: 首页 > article >正文

leetcode416.分割等和子集

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

示例 1:

输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5] 和 [11] 。

示例 2:

输入:nums = [1,2,3,5]
输出:false
解释:数组不能分割成两个元素和相等的子集。

提示:

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

思路:类似leetcode139.单词拆分-CSDN博客,如果数组和为奇数,则一定无法分割;如果为偶数,则转换为背包是否能装满问题,dp[j]表示容量j是否能凑成

public boolean canPartition(int[] nums) {
        int sum=0;
        for(int i=0;i<nums.length;i++)
            sum+=nums[i];
        // 如果是奇数,一定无法分割
        if(sum%2!=0)
            return false;
        // 如果是偶数,则转换为背包是否能装满问题,dp[j]表示容量j是否能凑成
        boolean [] dp=new boolean[sum/2+1];
        dp[0]=true;
        for(int i=0;i<nums.length;i++){
            //为保证每个物品用一次,从后往前遍历背包!!
            for(int j=dp.length-1;j>=0;j--){
                if(dp[j]&&j+nums[i]<dp.length){
                    dp[j+nums[i]]=true;
                    if(j+nums[i]==dp.length-1)
                        return true;
                }
            }
        }
        return false;
    }


http://www.kler.cn/a/511742.html

相关文章:

  • java基础概念59-File
  • 【神经网络基础】
  • Vue3数据响应式原理
  • WPS数据分析000004
  • 【STM32】LED状态翻转函数
  • 金融项目实战 06|Python实现接口自动化——日志、实名认证和开户接口
  • nginx作为下载服务器配置
  • Python人脸识别库DeepFace使用教程及源码解析
  • imbinarize函数用法详解与示例
  • python 基础类json和csv
  • 深入剖析iOS网络优化策略,提升App性能
  • 【LC】2239. 找到最接近 0 的数字
  • Node.js 写一个登录中间件
  • 排序算法学习小结
  • 如何确保Python爬虫不违反微店规定
  • Elixir语言的软件开发工具
  • 切面Aop的了解和使用
  • 【优选算法篇】2----复写零
  • 打游戏黑屏了但是有游戏声音 原因分析
  • 口令攻击和钓鱼攻击
  • nvm的各种命令及其用途
  • spring那些事
  • 2021最新中高阶Android面试题总结,已整理成文档_android面试题2021中高级
  • Springboot项目启动优化详解
  • 详解position: sticky粘性定位
  • 性能优化之动态加载