力扣474-一和零(Java详细题解)
题目链接:474. 一和零 - 力扣(LeetCode)
前情提要:
因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。
最近刚学完01背包,所以现在的题解都是以01背包问题为基础再来写的。
如果大家不懂01背包的话,建议可以去学一学,01背包问题可以说是背包问题的基础。
如果大家感兴趣,我后期可以出一篇专门讲解01背包问题。
dp五部曲。
1.确定dp数组和i下标的含义。
2.确定递推公式。
3.dp初始化。
4.确定dp的遍历顺序。
5.如果没有ac打印dp数组 利于debug。
每一个dp题目如果都用这五步分析清楚,那么这道题就能解出来了。
题目思路:
本题要求的是m个0n个1时子集中的最大长度。
其实这m个0n个1就是一种容器,我们要将该容器装满,求得子集的最大长度即可。
那么可以将这种容器抽象为背包,只不过这个背包是二维的,最大容量为m个0,n个1。
那么问题可以转化为将这个背包装满,求物品的数量。
接下来我们用动规五部曲来系统分析一下。
1.确定dp数组和i下标的含义。
我们这个背包是二维的,所以我们的dp数组也得是二维的。
dp[i] [j]指有i个0m个1时最大能装的物品数量。
2.确定递推公式。
首先我们来看看纯01背包问题的递推公式。
dp[j] = Math.max(dp[j],dp[j - weight[i]] + value[i]);
那么本题的递推公式其实和01背包递推公式相似。
每个物品只有选和不选俩种状态。
不选的话就是dp[i] [j]因为没有选该物品,所以背包容量不变。
选的话就是dp[i - x] [j - y] + 1;其实x表示的是当前物品0的数量,y表示当前物品1的数量。
因为选的话,就得求出加入当前物品之前的背包容量能装入的最大物品数量,再加上该物品。也就是 + 1;
所以我们的递推公式就是 dp[i] [j] = Math.max(dp[i] [j],dp [i - x] [j - y] + 1);
3.dp初始化。
dp[0] [0]指的就是当背包中有0个0和0个1时能装入的物品数量,所以dp[0] [0] = 0;
其他的非0下标可以通过dp数组推出来,所以其他的我们就不初始化,没有意义。
4.确定dp的遍历顺序。
该题与01背包的遍历顺序相同,物品从前往后遍历,背包容量从后往前遍历上为了保证每个物品只放入了一次。
5.如果没有ac打印dp数组 利于debug。
如果没有出现差错,我们就可以不用打印,因为我是写题解,所以我就不添加核心代码以外的代码,不然代码显的有些冗余。
举个例子。

最终代码:
class Solution {public int findMaxForm(String[] strs, int m, int n) {// 本题核心思路就是把这个背包装满,最多能装多少物品。//同时本题背包具有俩个维度。//递推公式 dp[i][j]是指在i个0j个1下能装满的物品数量。//那么每个物品也只有选和不选,该物品不选就是dp[i][j]//选的话就是dp[i - x][j - y] + 1,选择该物品的话要将装入前能装的最多物品加1,也就是加上这个物品//本题是把每个子集当做一个物品//确定dp数组int dp[][] = new int[m + 1][n + 1];//初始化dp数组dp[0][0] = 0;//遍历物品for (String s : strs) {int x = 0, y = 0;//统计每个物品的01数量for (int v = 0;v < s.length();v ++) {if (s.charAt(v) == '0') {x++;} else {y++;}}//遍历背包//由于背包是俩个维度所以俩个要从后往前遍历 确保物品只放入了一次for (int i = m; i >= x; i--) {for (int j = n; j >= y; j--) {//递推公式dp[i][j] = Math.max(dp[i][j], dp[i - x][j - y] + 1);}}}return dp[m][n];}
}
这一篇博客就到这了,如果你有什么疑问和想法可以打在评论区,或者私信我。
我很乐意为你解答。那么我们下篇再见!
相关文章:
力扣474-一和零(Java详细题解)
题目链接:474. 一和零 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完01背包,所以现在的题解都是以01背包问题为基础再来写的。 如果大家不懂01背包的话&#…...
【话题】量子计算:前沿技术与应用前景深度解析
引言 在当今信息时代,计算能力已成为推动科技进步和社会发展的重要驱动力。随着摩尔定律逐渐接近其物理极限,传统计算机硬件的性能提升面临前所未有的挑战。在此背景下,量子计算作为一种革命性的计算范式,凭借其独特的量子力学属性…...
第11章 32位x86处理器编程架构
第11章 32位x86处理器编程架构 IA-32(INTEL Architecture, 32-bit):INTEL 32位处理器架构简称IA-3,以8086处理器为基础发展起来的。该章重点介绍了IA-32处理器的工作方式和相关技术。 IA-32架构的基本执行环境 寄存器的扩展 32位处理器通用寄存器&am…...
加密软件是什么?有哪些用处呢?
一、加密软件是什么? 加密软件用于对数据进行加密和解密的工具或程序。其主要功能是通过使用加密算法将原始数据转换为密文,以保护数据的机密性和安全性,防止未经授权的访问和泄露。加密软件提供用户友好的界面和操作方式,使用户…...
浅谈C#之任务调度TaskScheduler
一、基本介绍 TaskScheduler 是一个抽象类,用于控制任务的执行方式,特别是它们如何被安排到线程池中的线程上执行。 TaskScheduler 负责将 Task 对象排队并决定何时、以何种方式执行这些任务。 二、TaskScheduler的作用 调度任务:将任务分配…...
SQL server 日常运维命令
一、基础命令 查看当前数据库的版本 SELECT VERSION;查看服务器部分特殊信息 select SERVERPROPERTY(Nedition) as Edition --数据版本,如企业版、开发版等,SERVERPROPERTY(Ncollation) as Collation --数据库字符集,SERVERPROPERTY(Nservername) as Serve…...
基于协同过滤算法+SpringBoot+Vue+MySQL的商品推荐系统
系统展示 用户前台界面 管理员后台界面 系统背景 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本的广泛运用,以及…...
VSCode中latex文件(Misplaced alignment tab character .LaTeX
Misplaced alignment tab character &.LaTeX 先给出参考文章1 Misplaced alignment tab character &.LaTeX 把bib文件中的 &改为 and 。删除原有的bbl文件、重新运行 选择这个运行 这个错误在overleaf上并没有遇到、在vscode上遇到了 方法二就是把 &改为…...
如何给电脑设置静态IP地址:详细步骤与指南
在日常生活和工作中,我们经常需要使用电脑连接到网络。通常情况下,电脑会自动获取IP地址,但有时候,由于特定的网络需求或配置,我们可能需要手动为电脑设置静态IP地址。本文将详细介绍如何在Windows和Mac操作系统中为电…...
【Mysql】系统服务启动访问报错问题处理:this is incompatible with sql_mode=only_full_group_by
一、背景: 本来已经正常运行的平台,突然有一天由于对服务器进行部分操作迁移,发现jar可以正常启动,但是访问功能一直报错,监控后台日志后,发现了问题: 报错的具体信息如下: Caused…...
安装oh-my-zsh后报错zsh: command not found: conda问题解决
zsh: command not found: conda问题解决 一、问题介绍与环境介绍 系统为macOS Sonoma 14.5 所用终端为zsh 主要问题:安装了oh-my-zsh之后conda命令在终端中不可用。 二、原因分析 终端中zsh的可访问的程序一般放在/bin, /usr/bin, /usr/local/bin,~/bi…...
避免 PyCharm 将该 Python 脚本作为测试运行
为了避免 PyCharm 将该 Python 脚本作为测试运行(即 pytest 自动捕获),你可以做以下几步来确保该脚本作为普通的 Python 程序执行,而不是作为 pytest 运行。 解决方案: 1. 确保文件名不以 test_ 开头: P…...
【Sqlite】.NET Framework使用Sqlite的注意事项
注意:NuGet引入System.Data.SQLite.Core不要引入System.Data.SQLite 注意:局域网共享链接 正常链接Data Source\\BAT-OCV\SqliteDB\batOCV.db;Version3;PoolingTrue;Max Pool Size100; 局域网链接Data Source\\\BAT-OCV\SqliteDB\batOCV.db;Version3;P…...
2024下《系统集成项目管理工程师》50个高频考点汇总!值得收藏
11月软考已经迫在眉睫,准备考系统集成的小伙伴们开始准备了吗? 这里给大家整理了50个高频考点,涵盖全书80%重点,先把这个存下!再慢慢看书,边看书边背这个,事半功倍。 1、信息安全的基本要素有&…...
Java 远程调用接口(RMI)
Java Remote Method Invocation (RMI) 概述 Java 的 Remote Method Invocation (RMI) 是一种允许 Java 程序调用远程对象的方法。这种方法类似于本地调用,但目标对象实际位于远程 JVM(Java 虚拟机)中。RMI 实现了分布式计算,允许…...
torch.squeeze()
在深度学习中经常会遇见这个函数,现在来说一下这个函数的用法,其实很简单的。 函数作用 函数的作用就是:挤压size为1的维度,挤压也就是remove。如果size不是1的话,那就没变化。 使用说明 在使用的时候,…...
COD论文笔记 BiRefNet
本质还是一个 U 型编码器解码器结构的分割模型。 我可以考虑将©和(d)结合,即对解码器的输入不进行 patchify,同时在各个阶段引入梯度参考信息 最近的相关工作,中间监督、额外先验(频率,梯度,边缘等)取得不错效果 作者观察到…...
表单项标签简单学习
目录 1. 单选框 radio 编辑编辑编辑编辑 2. 复选框 checkbox 编辑编辑编辑 3. 隐藏域 hidden 4. 多行文本框 textarea 编辑编辑 5. 下拉框 select 编辑编辑 6. 选择头像编辑编辑 <!DOCTYPE html> <html lang"en"> <h…...
固态硬盘和机械硬盘区别?固态硬盘和机械硬盘哪个好?
在当今数据时代,硬盘作为电脑里的存储设备在我们的生活和工作中扮演着十分重要的角色。随着存储技术的进步,市场上出现了两种主流硬盘:固态硬盘和机械硬盘。它们各有优劣,那么二者究竟有什么区别?我们又该如何选择呢&a…...
QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第三期]
QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第三期] 第三期介绍:频道模块之频道成员 目录 QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第三期]第三期介绍:频道模块之频道成员获取子频道在线成员数获取频道成员列表获取频道身份组成员列…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
