算法训练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).

相关推荐
yaoxin5211236 分钟前
419. 现代 Java IO 最佳实践 - 写入文本文件
java·windows·python
雪宫街道11 分钟前
synchronized 锁的范围:对象锁、类锁与代码块锁
java·jvm·后端·面试
菜菜的顾清寒15 分钟前
力扣HOT100(42)链表-随机链表的复制
算法·leetcode·链表
x***r15121 分钟前
linux安装 jdk-8u291-linux-x64.tar.gz 详细步骤(解压配置环境变量)
java
lqqjuly22 分钟前
模型剪枝与稀疏化:理论、算法与可运行实现
人工智能·算法·剪枝
逻辑君39 分钟前
Foresight研究报告【20260011】
人工智能·线性代数·算法·矩阵
珊瑚里的鱼39 分钟前
【动态规划】不同路径Ⅱ
算法·动态规划
星恒随风1 小时前
C语言数据结构排序算法详解(下):冒泡排序、快速排序、归并排序和计数排序
c语言·数据结构·笔记·学习·排序算法
极光代码工作室1 小时前
基于SpringBoot的校园论坛系统
java·springboot·web开发·后端开发
XS0301061 小时前
Spring Bean 作用域 & 生命周期
java·后端·spring