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

背包问题:

LeetCode:416. 分割等和子集

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

1.思路

①确定dp[]数组的含义,dp[i]:表示重量为 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).

相关推荐
gadiaola22 分钟前
【JVM】Java虚拟机(二)——垃圾回收
java·jvm
眼镜哥(with glasses)24 分钟前
蓝桥杯 国赛2024python(b组)题目(1-3)
数据结构·算法·蓝桥杯
coderSong25683 小时前
Java高级 |【实验八】springboot 使用Websocket
java·spring boot·后端·websocket
Mr_Air_Boy4 小时前
SpringBoot使用dynamic配置多数据源时使用@Transactional事务在非primary的数据源上遇到的问题
java·spring boot·后端
豆沙沙包?4 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏
年老体衰按不动键盘5 小时前
快速部署和启动Vue3项目
java·javascript·vue
咖啡啡不加糖5 小时前
Redis大key产生、排查与优化实践
java·数据库·redis·后端·缓存
liuyang-neu5 小时前
java内存模型JMM
java·开发语言
int型码农5 小时前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序
UFIT5 小时前
NoSQL之redis哨兵
java·前端·算法