Leetcode 474 一和零

题意理解

        给你一个二进制字符串数组 strs 和两个整数 m 和 n 。

        请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。

        如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。

        

        将字符串0和1的个数看作是该字符串的两个维度,假设将其看作物品的重量和体积。

        那么m和n就是对背包的限制:承重量为m, 体积为的背包。

        求元素最多的子集,该问题可以转换为:求装满承重量m体积n的背包最多有放多少件物品。

        所以该问题被转换为一个二维的0-1背包问题。

解题思路

        首先理解题意将其转换为0-1背包问题。

        其次,此处的动态滚动数组是二维的:

        dp[i][j]表示:装满承重i,体积为j的背包最多有多少件物品。

        之前的递推公式为:

        dp[j]=max(dp[j],dp[j-weight[i]]+values[i])

        此处递推公式做些许调整:

        dp[i][j]=max(dp[i][j],dp[i-weight[i]][j-vomule[i]]+1)

        初始化:

                对于背包为0 的物品装满需要0件物品。

1.动态规划:动态滚动数组求解二维0-1背包问题

任然是采用动态规划五部曲来求解该问题,不同之处在于此处的背包是一个二维限制的背包,此处的dp滚动数组是二维的。

public int findMaxForm(String[] strs, int m, int n) {int[][] dp=new int[m+1][n+1];for(int[] tmp:dp) Arrays.fill(tmp,0);int countZero=0,countOne=0;//遍历物品for(int i=0;i<strs.length;i++){//计算0/1个数countZero=0;countOne=0;for(char c:strs[i].toCharArray()){if(c=='0') countZero++;if(c=='1') countOne++;}//遍历mfor(int w=m;w>=0;w--){//遍历nfor(int v=n;v>=0;v--){if(countZero<=w&&countOne<=v){dp[w][v]=Math.max(dp[w][v],dp[w-countZero][v-countOne]+1);}}}}return dp[m][n];}

2.分析

时间复杂度

        O(m×n×str_len)

空间复杂度

        O(m×n)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/628230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的网上订餐管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

Python系列(2)—— 数据类型

Python核心数据类型 一、Numbers&#xff08;数字&#xff09;三、String&#xff08;字符串&#xff09;三、Tuple&#xff08;元组&#xff09;四、List&#xff08;列表&#xff09;五、Set&#xff08;集合&#xff09;六、Dictionary&#xff08;字典&#xff09; 在Pytho…

Go语言中的Pool

简介 Go语言中的pool是一个资源池&#xff0c;它可以存储一定数量的资源&#xff0c;这些资源可以被多个goroutine共享。Pool可以提高资源的利用率&#xff0c;减少资源的创建和销毁带来的开销。 原理 Pool的实现原理很简单&#xff0c;它使用一个队列来存储资源。当一个gor…

go语言初探(一)

package mainimport ("fmt""time" )func main() {fmt.Print("hello go!")time.Sleep(1 * time.Second)}运行后&#xff0c;结果如下&#xff1a; 1、golang表达式中&#xff0c;加&#xff1b;和不加&#xff1b;都可以 2、函数的{和函数名一…

五、Model与View

一、Model/View结构 数据&#xff1a;如数据库的一个数据表或者SQL查询结果&#xff0c;如内存中的数据类对象&#xff0c;或者磁盘文件结构等Model&#xff1a;与数据通信&#xff0c;并作为视图组件提供数据接口View&#xff1a;屏幕界面组件&#xff0c;视图从数据模型获得…

软件工程:黑盒测试等价分类法相关知识和多实例分析

目录 一、黑盒测试和等价分类法 1. 黑盒测试 2. 等价分类法 二、黑盒测试等价分类法实例分析 1. 工厂招工年龄测试 2. 规定电话号码测试 3. 八位微机测试 4. 三角形判断测试 一、黑盒测试和等价分类法 1. 黑盒测试 黑盒测试就是根据被测试程序功能来进行测试&#xf…

Arduino快速上手esp32方案开发

一、什么是ESP32&#xff1f; ESP32是Espressif Systems推出的一款高性能、低功耗的Wi-Fi和蓝牙双模系统级芯片&#xff08;SoC&#xff09;&#xff0c;广泛应用于物联网、智能家居、可穿戴设备等领域。它基于极低功耗的Tensilica Xtensa LX6微处理器&#xff0c;并集成了丰富…

【现代密码学】笔记4--消息认证码与抗碰撞哈希函数《introduction to modern cryphtography》

【现代密码学】笔记4--消息认证码与抗碰撞哈希函数《introduction to modern cryphtography》 写在最前面4 消息认证码与抗碰撞哈希函数MAC概念回顾&#xff08;是的&#xff0c;我忘记这些缩写是什么了。。&#xff09;MAC的定义适应性CMA&#xff08;Chosen Message Attack&a…

SpringBoot教程(十五) | SpringBoot集成RabbitMq

SpringBoot教程(十五) | SpringBoot集成RabbitMq RabbitMq是我们在开发过程中经常会使用的一种消息队列。今天我们来研究研究rabbitMq的使用。 rabbitMq的官网&#xff1a; rabbitmq.com/ rabbitMq的安装这里先略过&#xff0c;因为我尝试了几次都失败了&#xff0c;后面等我…

边缘型人格障碍测试

边缘性人格障碍属于常见多发的人格障碍类型&#xff0c;在2015年美国的相关调查显示&#xff0c;边缘型人格障碍的患病率在初级医疗环境中为6%&#xff0c;在精神科住院病人中则达到20%。 边缘性人格障碍治疗难度高&#xff0c;对于个人造成的危害大。应该及早了解边缘性人格障…

使用jarsigner给jar文件签名的5个步骤

jarsigner, keytool 这2个都是JDK的内置工具,在JDK的bin目录中可以找到, 下面是使用jarsigner给jar文件签名的5个步骤: 1. 使用java的jar工具创建JAR文件; # 将当前文件夹下的所有文件打包到myapp-1.0.jar文件中 后面的*为通配符, 也可以指定需要打包的jar中的文件或者文件夹…

软件测试|Git:fatal: refusing to merge unrelated histories错误分析与解决

问题介绍 在使用Git时&#xff0c;有时我们可能会遇到以下错误消息&#xff1a; fatal: refusing to merge unrelated histories这个错误通常发生在尝试合并两个不相关的Git仓库历史时。在本文中&#xff0c;我们将详细解释为什么会出现这个错误以及如何解决它。 问题分析 …

DataFunSummit:2023年云原生大数据峰会:核心内容与学习收获(附大会核心PPT下载)

随着数字化转型的深入推进&#xff0c;大数据技术已经成为企业获取竞争优势的关键因素之一。本次峰会汇聚了业界顶尖的大数据专家、企业领袖和技术精英&#xff0c;共同探讨云原生大数据领域的最新技术和趋势。本文将深入分析峰会的核心内容&#xff0c;并探讨参会者从中能学到…

Python字符串验证与正则表达式【第23篇—python基础】

文章目录 引言方法1&#xff1a;使用 isalpha() 方法方法2&#xff1a;使用正则表达式方法3&#xff1a;遍历字符检查应用场景示例与比较优化与扩展方法4&#xff1a;考虑空格和其他字符应用场景扩展 示例与比较优化与扩展方法4&#xff1a;考虑空格和其他字符方法5&#xff1a…

【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C考前速过系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《…

excel如何冻结窗格

冻结窗口&#xff08;Freeze Panes&#xff09; 打开你的 Excel 文件。 选择你希望冻结的行或列。 如果要冻结第一行&#xff0c;请选择第一行。 如果要冻结第一列&#xff0c;请选择第一列。 如果要同时冻结行和列&#xff0c;请选择希望冻结的左上角单元格的下方和右侧的单…

Docker容器(二)安装与初体验wordpress

一、安装 1.1关闭SeLinux SeLinux&#xff08;Security-Enhanced Linux&#xff09;是一种基于Linux内核的安全模块&#xff0c;旨在提供更严格的访问控制和安全策略。它通过强制实施安全策略来限制系统资源的访问&#xff0c;从而保护系统免受恶意软件和未经授权的访问。 在…

提升问题检索的能力

事实上&#xff0c;在信息极度丰富的时代&#xff0c;信息检索和筛选能力格外重要。一些搜索引擎的出现已极大地方便了我们日常的信息检索&#xff0c;此处需要注意的是我们不能仅仅局限于常见的搜索引擎&#xff0c;也需要关注和积累一些专业平台或是具有集成功能的引擎&#…

postman签名算法(将请求体参入签名算法计算)

let timestamp (new Date()).getTime().toString(); timestamp timestamp.substr(0,13); //设置集合的全局变量 pm.collectionVariables.set("timestamp", timestamp); var appkeyXXXXXXX; pm.collectionVariables.set("appkey",appkey); function …

2023国赛 陕西省省级二等奖得主 数学建模学习资源推荐

美国最为权威的数学建模参考书Mathematical Modeling 在前言部分对数学建模有一个比较通俗易懂的解释&#xff1a; Mathematical modeling is the link between mathematics and the rest of the world. You ask a question. You think a bit, and then you refine the questi…