2025-3-25 leetcode刷题情况(动态规划——01背包)

一、494.目标和

1.题目描述

2.代码

3.思路

首先计算数组元素总和 sum,若 target 的绝对值大于 sum 或者 target 与 sum 之和为奇数,说明无法达成目标,直接返回 0。接着计算出等价的背包容量 bagSize。然后创建 dp 数组,将 dp[0] 初始化为 1,表示不选任何元素时和为 0 有一种方法。随后利用两层循环进行动态规划,外层遍历数组元素,内层从 bagSize 逆向遍历到当前元素值,更新 dp[j],将 dp[j - nums[i]] 累加到 dp[j] 上,最终 dp[bagSize] 即为满足目标值的方法数量。

二、474.一和零

1.题目描述

2.代码

3.思路

先创建一个 (m + 1) * (n + 1) 的二维数组 dpdp[i][j] 表示使用 i 个 0 和 j 个 1 时能选取的最大字符串数量。接着遍历字符串数组 strs,对于每个字符串,统计其中 0 和 1 的数量。之后,从 m 到该字符串 0 的数量、n 到该字符串 1 的数量进行逆向遍历,更新 dp[i][j],取当前值和 dp[i - zeroNum][j - oneNum] + 1 中的较大值,dp[i - zeroNum][j - oneNum] + 1 表示选取当前字符串后的最大数量。最后返回 dp[m][n]。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值