算法训练Day41|416. 分割等和子集

背包问题:

LeetCode:416. 分割等和子集

416. 分割等和子集 - 力扣(LeetCode)

1.思路

①确定dp\[\]数组的含义,dpi:表示重量为 i 的背包所能装下的最大价值.

②确定递推公式,倒叙加入.

③初始化,默认为0即可.

④确认遍历顺序,先遍历物品,再遍历背包,背包从大到小遍历.

⑤举例代入,打印dp\[\]数组.

2.代码实现

复制代码
 1class Solution {
 2    public boolean canPartition(int[] nums) {
 3        int sum = 0;
 4        for (int num : nums) {
 5            sum += num;
 6        }
 7        if (sum % 2 != 0) {
 8            return false;
 9        }
10        int target = sum / 2;
11        // target 代表重量和价值 则dp[] 数组要达到target,需要创建数组范围为:[0, target]
12        int[] dp = new int[target + 1];
13        for (int i = 0; i < nums.length; i++) { // 先遍历物品
14            for (int j = target; j >= nums[i]; j--) {
15                // 再遍历背包
16                dp[j] = Math.max(dp[j], dp[j - nums[i]] + nums[i]);
17            }
18        }
19        return dp[target] == target;
20    }
21}

3.复杂度分析

时间复杂度:O(n^2).

空间复杂度:O(n).

相关推荐
Gorway3 小时前
理解 Spring 依赖注入:从构造器注入到集合与条件 Bean
java·后端
LiLiYuan.3 小时前
【字符串常量池】
java·开发语言·面试
Sylvia33.3 小时前
从轮询到推送:足球数据API架构演进与火星数据技术拆解
java·服务器·网络·python·websocket·架构
cfm_29144 小时前
高并发系统缓存全解
java·缓存
16月6日-晴4 小时前
Java面向对象进阶—static
java·开发语言
致Great4 小时前
科研人的 AI,不该只回答问题:我用字节TraeWork 跑了一遍真实研究任务
算法
纵有疾風起4 小时前
线性表的定义与基本操作 — 从逻辑结构到 ADT 接口
数据结构·算法·408·线性表·adt
xiaohaiAIgeo4 小时前
【2026年】ASHRAE 110与EN 14175通风柜测试标准对比:进口与国产品牌性能差距
java·前端·数据库·科普知识
wuyk5555 小时前
1.栈:后进先出的线性数据结构
c语言·数据结构·stm32·单片机
meilindehuzi_a5 小时前
TypeScript面试题:interface 与 type:相同点、核心区别与选择指南
java·ubuntu·typescript