【Leetcode Daily】474一和零
发表于|更新于|力扣日常 | LeetcodeDaily
|总字数:499|阅读时长:2分钟|浏览量:
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给一个字符串数组,其中的字符串均由 0 和 1 组成,同时给两个数字,m n,要求找出一个字符串子集,使得该子集内的字符串个数尽可能大的同时,0 和 1 的数量分别不超过 m 和 n。
思路分享
我居然能自己看出来这个是 01背包 问题了,确实进步啦,这种问题采用 选或不选 的思路就行。
但我觉着需要注意的难点在于记忆化搜索转换成递推的形式,在于考虑边界和初始化,毕竟记忆化搜索只要 return 就行了,而递推要考虑的就多了。
代码解答(强烈建议自行解答后再看)
- 参考题解
1 | class Solution: |
文章作者: 陆爻齐-LuYaoQi
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!
相关推荐

2025-10-13
【Leetcode Daily】1143最长公共子序列
题目浅析 想查看原题可以点击题目链接。 简单地说,就是找到两个字符串的最长公共子序列(具体含义请看原题)长度。 思路分享 这是线性 DP 的经典题目,子序列由于是可以选择性的删除中间部分,所以计算两个字符串的公共子序列,可以分为多个子问题,具体分析如下: https://leetcode.cn/problems/longest-common-subsequence/solutions/2133188/jiao-ni-yi-bu-bu-si-kao-dong-tai-gui-hua-lbz5/ 对于两个字符串,每分别选的两个字符各有选和不选两种情况,也就是四种情况。在相等的情况下,肯定是两个都选好;不等时则两边各选一次。两边都不选一定不如上面三种情况。 比如,有长 n、m 的两个字符串的最长公共子序列就是下面的子情况推导出来的:1. n-1、m;2. n、m-1;3. n-1、m-1. 前两个是字符匹配失败的场景,3...

2025-11-05
【Leetcode Daily】1191K次串联后最大子数组之和
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个数组和一个数字k,这个数组将自我复制 k 次串联一起,求串联后的数组中子数组之和的最大值。(可以为空) 思路分享 当 k 为 1 时,就相当于只求这个数组的最大子数组和,与 【Leetcode Daily】53最大子数组和 无异;当 k 为 2 时,除了数组变化,与 1 没什么区别;当 k 大于等于 3,如果子数组从第一个到最后一个,那么就相当于在 k = 2 的基础上,加上了 k-2 个数组的总和。 https://leetcode.cn/problems/k-concatenation-maximum-sum/solutions/3675237/fu-yong-53-ti-dai-ma-jian-ji-xie-fa-pyth-qmtp/ 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112131415class Solution: def maxSubArr(self, arr: List[int]): s = f = 0 for...

2025-11-23
【Leetcode Daily】1262可被三整除的最大和
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个整数数组,可任意选取其中数字求和,找到其中和能被 3 整除的最大值。 思路分享 对于动态规划而言,可以采用选或不选的思路。对前 n 个数字而言,选取第 n 个数字时,如果此时和能被 3 除后的余数为 0(也就是正好整除),那么就可以转为选取第 n-1 个数字时,需要和能被 3 除后,余数为 (0+nums[n]) %3。 https://leetcode.cn/problems/greatest-sum-divisible-by-three/solutions/2313700/liang-chong-suan-fa-tan-xin-dong-tai-gui-tsll/?envType=daily-question&envId=2025-11-23 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112131415161718192021222324252627class Solution: def maxSumDivThree(self, nums:...

2025-11-14
【Leetcode Daily】1289下降路径最小和II
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个二维数组,现在要从第一行走到最后一行,但是两个相邻行的取数不能同列 思路分享 此题最大的难点在于读题,是相邻行不能同列,并非只能相邻的列。之后的思路与 【Leetcode Daily】931下降路径最小和 基本相同,故不赘述。 https://leetcode.cn/problems/minimum-falling-path-sum-ii/solutions/3077128/ling-cha-shan-ai-fang-fang-ling-shen-jia-7jxz/ 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213141516171819202122232425262728class Solution: def minFallingPathSum(self, grid: List[List[int]]) -> int: # 递推 ans = 0 n = len(grid) if n == 1: ...

2025-11-22
【Leetcode Daily】1458两个子序列的最大点积
题目浅析 想查看原题可以点击题目链接。 简单地说,就是对两个数组可以选非空子序列做点积,求其最大值。 思路分享 还是选或不选的经典思路,但一个难点在于非空,因为以往选到最后,边界条件都习惯用 0 或者负无穷,这一次感觉不能用确定性的边界。但实际操作时,如果直接把每个状态都先放上各个值之间的点积,再做状态转移,然后就可以实现非空子序列的最大点积了。 https://leetcode.cn/problems/max-dot-product-of-two-subsequences/solutions/519006/liang-ge-zi-xu-lie-de-zui-da-dian-ji-by-jwqux/ 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213141516171819202122232425262728293031323334class Solution: def maxDotProduct(self, nums1: List[int], nums2: List[int]) -> int: # 空间优化...

2025-12-15
【Leetcode Daily】2110股票平滑下跌阶段的数目
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个数组代表股票,定义平滑下跌为一日值为前一日减一,求有多少个连续子数组是满足平滑下跌的。(包括长度为 1) 思路分享 每一天为止,是否为平滑下跌只与前一日有关,所以 f[i] += f[i-1] + 1 if prices[i] == prices[i-1]+1 else 1 https://leetcode.cn/problems/number-of-smooth-descent-periods-of-a-stock/solutions/1165540/fen-zu-xun-huan-by-endlesscheng-ykhm/?envType=daily-question&envId=2025-12-15 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213class Solution: def getDescentPeriods(self, prices: List[int]) -> int: ans = 0 ...
公告
希望你我都能得偿所愿
PS:相对流水账的文章只能在归档找得到
系列文章
