首页 > 其他分享 >【LeeCode】416. 分割等和子集 -- todo

【LeeCode】416. 分割等和子集 -- todo

时间:2023-01-05 23:31:44浏览次数:78  
标签:target -- sum LeeCode int 416 num new dp

【题目描述】

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

https://leetcode.cn/problems/partition-equal-subset-sum/


【示例】

【LeeCode】416. 分割等和子集 -- todo_数组

【代码】​​wulafly​

01背包

01 背包,即数组中的元素不可重复使用,

外循环遍历 arrs,内循环遍历 target,且内循环倒序:

完全背包

场景1:数组中的元素可重复使用并且不考虑元素之间顺序

arrs 放外循环(保证 arrs 按顺序)target内循环(正序)

场景2:如果组合问题需考虑元素之间的顺序,需

target 放在外循环,将 arrs 放在内循环(正序)


// 2023-1-5

import java.util.Arrays;

class Solution {
public boolean canPartition(int[] nums) {
int sum = Arrays.stream(nums).sum();
// 隐藏的背包: 2个子集的元素和相等, target必然是sum的一半
int target = sum / 2;
// 如果sum不是偶数,则必然不可能分为2个相等的子集
if (sum % 2 != 0) return false;
// dp[i] 表示是否存在和为 i 的 num 组合
boolean[] dp = new boolean[target + 1];
dp[0] = true;
// 01背包问题:元素不可重复,外层物品,内层背包且倒序
for(int num: nums){
for (int i = target; i >= num ; i--) {
// dp[i]的值以来其本身或者dp[i-num]
dp[i] = dp[i] || dp[i - num];
}
}
return dp[target];
}
}
public class Test {
public static void main(String[] args) {
new Solution().canPartition(new int[]{1,5,11,5}); // 输出: true, 数组可以分割成 [1, 5, 5] 和 [11]
new Solution().canPartition(new int[]{1,2,3,5}); // 输出: false
}
}


标签:target,--,sum,LeeCode,int,416,num,new,dp
From: https://blog.51cto.com/u_13682316/5992018

相关文章

  • mysql如何区分中文与数字
    有时候我们要检查几万条数据中是否有不合法的数字,就是不能用来计算,系统运行后会报错的数字。在时候会苦恼,因为数据量大即使知道有不合法的数据也查不出来非常的苦恼。看代码......
  • 【LeeCode】322. 零钱兑换 - todo
    【题目描述】给你一个整数数组 ​​coins​​​ ,表示不同面额的硬币;以及一个整数 ​​amount​​ ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如......
  • 【LeeCode】494. 目标和 -- todo
    【题目描述】给你一个整数数组 ​​nums​​​ 和一个整数 ​​target​​ 。向数组中的每个整数前添加 ​​'+'​​ 或 ​​'-'​​ ,然后串联起所有整数,可以构造一......
  • Android笔记--报错AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY in "cre
    问题描述每次一运行,APP程序必定闪退,百度了发现,闪退问题绝大多数就跟sql语句有关;看到控制台报出这样的错误:百度发现,我忘记了最初的知识点:在表里面,自动递增是在数据类型......
  • QT基础——核心模块QtCore
    qtcore提供了元对象系统,扩展了c++在元对象系统的基础上,qt又提供了信号/槽、property以及对象树等特性TheMeta-ObjectSystemThePropertySystemObjectModelObje......
  • spring boot——spring boot的基本配置——spring boot整合mybatis——本地实例运行—
            pojo类:packageorg.example.entity;publicclassMyUser{privateintid;privateStringname;privateintage;publ......
  • jmeter-插件安装
    去官网下载插件https://jmeter-plugins.org/install/Install/参照https://www.cnblogs.com/hcx990214/p/16637150.html......
  • BalticOI 2004 Sequence 题解
    题目链接在这里~对于序列\(\{a\}\),把每一个\(a_i\)减去一个\(i\),得到\(\{a'\}\)序列\(\{b\}\)同理。因为\(b_1<b_2<...<b_n\),故\(b_1'\leqslantb_2'\leqslant...\leqs......
  • 领域模型设计粗讲
    1、领域概念领域模型:领域内的关键的概念、概念之间的关系领域模型是概念模型领域模型描述的是现实世界的事物和他们之间的关系领域模型和软件无关,反映的是问题空间的......
  • 算法14_位运算及经典面试题
    1.二进制Java数值运算过程中都是先将十进制转换为二进制然后再进行运算,再把二进制数据转换为十进制展现给用户。二进制运算规则如下:对于有符号的而言,最高位为符......