数据结构学习 Leetcode474 一和零

关键词:动态规划 01背包

一个套路:

  • 01背包:空间优化之后dp【target+1】,遍历的时候要逆序遍历
  • 完全背包:空间优化之后dp【target+1】,遍历的时候要正序遍历

 

目录

题目:

思路:

复杂度计算:

代码:


题目:

思路:

这题能想到用01背包并正确用起来有点难哦!

这里面有三样东西,一些strs,m个0和n个1。

我刚开始是希望把strs当作容器,把0和1装进strs这个容器里,但是不行。

转换思路:把m个0和n个1作为两个容器,strs里的0和1分别装进这两个容器里。

因为有两个容器,所以dp得要两个维度dp[m+1][n+1]

其他都和一维的01背包一样

状态:dp[j][k] 前i个str中,使用 j个 0 和 k 个 1 的情况下最多可以得到的字符串数量。

转移方程:dp[j][k]=max(dp[j][k],dp[j-zeros][k-ones]+1)【zeros、ones:第i个str0和1的个数】

  • 如果选dp[j][k]:不要第i个str,维持上一个str的状态。
  • 如果选dp[j-zeros][k-ones]+1:要第i个str,数量+1。

初始化:dp[j][k]=0 因为是求最大

复杂度计算:

时间复杂度O(lmn+L) l=strs.size() L=所有str的字符总数(统计了每个str的01数量)

空间复杂度O(mn)

代码:

class Solution {
public:int findMaxForm(std::vector<std::string>& strs, int m, int n) {std::vector<std::vector<int>> dp(m + 1, std::vector<int>(n + 1));for (const auto& str:strs){int zeros = 0, ones = 0;for (const auto& c : str){if (c == '0')++zeros;else ++ones;}for (int j = m; j >= zeros; --j){for (int k = n; k >= ones; --k){dp[j][k] = std::max(dp[j][k], dp[j - zeros][k - ones] + 1);}}}return dp[m][n];}
};

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

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

相关文章

BloombergGPT—金融领域大模型

文章目录 背景BloombergGPT数据集金融领域数据集通用数据集分词 模型模型结构模型相关参数训练配置训练过程 模型评估评估任务分布模型对比金融领域评估通用领域评估 背景 GPT-3的发布证明了训练非常大的自回归语言模型&#xff08;LLM&#xff09;的强大优势。GPT-3有1750亿个…

【vtkWidgetRepresentation】第十六期 vtkContourRepresentation(四)

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享vtkContourRepresentation关联的Widget---vtkContourWidget的源码解析,希望对各位小伙伴有所帮助! vtkAbstractWidget中本以为没有什么特别需要注意的地方,就没有分享出来。通常Widget中的操作或参数…

LeetCode 每日一题 Day 26 ||枚举

2735. 收集巧克力 给你一个长度为 n 、下标从 0 开始的整数数组 nums &#xff0c;表示收集不同巧克力的成本。每个巧克力都对应一个不同的类型&#xff0c;最初&#xff0c;位于下标 i 的巧克力就对应第 i 个类型。 在一步操作中&#xff0c;你可以用成本 x 执行下述行为&am…

《深入理解C++11:C++11新特性解析与应用》笔记四

第四章 新手易学&#xff0c;老兵易用 4.1 右尖括号>的改进 在 C98 中&#xff0c;有一条需要程序员规避的规则:如果在实例化模板的时候出现了连续的两个右尖括号 >&#xff0c;那么它们之间需要一个空格来进行分隔&#xff0c;以避免发生编译时的错误。C98 会将>&g…

ubuntu22下安装minconda

bing 搜索 canda install 找到官方网站 https://docs.conda.io/projects/miniconda/en/latest/ 这里我们安装minconda。 官网有安装方法。 mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh…

makefile快速入门(精简版)

WHAT Makefile 是一种文本文件&#xff0c;由一系列规则&#xff08;Rules&#xff09;组成&#xff0c;每个规则描述了一个或多个目标&#xff08;Target&#xff09;和相应的依赖关系&#xff08;Dependencies&#xff09;&#xff0c;以及构建目标所需的命令&#xff08;Com…

【K8S 二进制部署】部署单Master Kurbernetes集群

目录 一、基本架构和系统初始化 1、集群架构&#xff1a; 2、操作系统初始化配置&#xff1a; 2.1、关闭防火墙和安全机制&#xff1a; 2.2、关闭swap 2.3、根据规划设置主机名 2.4、三台主机全部互相映射 2.5、调整内核参数 3、时间同步&#xff08;所有节点时间必须同…

Linux系列之不解压直接查看gzip压缩日志

Linux系列之不解压直接查看gzip压缩日志文件 在Linux服务器上&#xff0c;日志文件经常会用gzip格式进行压缩&#xff0c;以节省磁盘&#xff0c;对于这种压缩文件&#xff0c;需要解压&#xff1f;然后再用cat、grep这些命令进行查看&#xff1f;其实不需要&#xff0c;Linux…

Vue解决跨域问错误:has been blocked by CORS policy 后端跨域配置

解决跨域问题后端跨域配置代码&#xff1a; /*** 作者 hua* 描述 跨域配置*/ Configuration public class WebConfiguration implements WebMvcConfigurer {/*** 跨域配置对象* return CorsConfiguration对象*/private CorsConfiguration corsConfig() {CorsConfiguration cor…

考研结束,以下事情要抓紧做了!

Hello&#xff0c;大家好&#xff0c;我是 Sunday。 首先恭喜大家考研结束&#xff0c;也在这里祝各位考研的同学们可以 成功上岸 ✿✿ヽ(▽)ノ✿。 不过&#xff0c;考试结束并不是一个终点&#xff0c;而是另外一个新的起点。摆在大家面前的&#xff0c;还有很多新的问题&a…

百度CTO王海峰:飞桨开发者已达1070万

目录 写在前面 飞桨开发者已达1070万 文心一言用户规模破亿&#xff0c;日提问量快速增长 写在前面 “文心一言用户规模突破1亿。”12月28日&#xff0c;百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰在第十届WAVE SUMMIT深度学习开发者大会上宣布。会上&…

北航人机交互复习

人机交互 根据学过的内容&#xff0c;说明我们为什么要研究人机交互 人机交互需求推动&#xff1a;追求高效、安全、舒适、准确人机交互产业推动&#xff1a;相关产业发展&#xff0c;技术发展使幻想变为可能&#xff0c;譬如&#xff0c;苹果人机交互界面开发技术推动&#…

面试算法76:数组中第k大的数字

题目 请从一个乱序数组中找出第k大的数字。例如&#xff0c;数组[3&#xff0c;1&#xff0c;2&#xff0c;4&#xff0c;5&#xff0c;5&#xff0c;6]中第3大的数字是5。 分析 面试题59中介绍过一种基于最小堆的解法。这种解法的数据位于一个数据流中&#xff0c;不能一次…

【AIGC_MIDJOURNEY】专业提示词+配图分析

prompt : landscape of beautiful forest, lush foliage and water falls, crystal clear lake, fire flies, twinkling lights , rococo, art nouveau, --ar 16:9 这个提示词描述了一个美丽的森林景观&#xff0c;包括茂密的植被和瀑布&#xff0c;清澈见底的湖泊&#xff0c;…

干货!一文详解车间管理的五大基本方法

车间管理是制造型企业生产过程中的重要环节&#xff0c;它直接影响着企业的生产效率、成本控制、产品质量以及员工的士气与工作效率。优秀的车间管理不仅能够提升产品的质量和生产力&#xff0c;还能降低运营成本&#xff0c;从而在激烈的市场竞争中为企业赢得优势。 为了帮助…

Java 通过 filter 过滤器对请求参数进行处理并修改

通过 filter 过滤器对请求参数进行处理并修改 问题描述&#xff1a;解决方案1、重写 HttpServletRequestWrapper 类2、新增过滤器 问题描述&#xff1a; 通过过滤器&#xff0c;对前端请求过来的参数进行处理&#xff08;本次是对请求参数进行前后空格的去除&#xff09;&…

vue3-13

token可以是后端api的访问依据&#xff0c;一般绝大多数时候&#xff0c;前端要访问后端的api,后端都要求前端请求需要携带一个有效的token,这个token用于用户的身份校验&#xff0c;通过了校验&#xff0c;后端才会向前端返回数据&#xff0c;进行相应的操作&#xff0c;如果没…

Linux的LVM与磁盘配额

一.LVM 1.什么是LVM Logical Volume Manager 逻辑卷管理 能够在保持现有数据不变的情况下&#xff0c;动态调整磁盘容量&#xff0c;从而提高磁盘管理的灵活性 /boot 分区用于存放引导文件&#xff0c;不能基于LVM创建 解释&#xff1a;就是将多个不同的物理卷组合在一起形…

C++设计模式代码--单例模式

参考&#xff1a;5. 单例模式&#xff08;Singleton&#xff09; (yuque.com) 1、什么是单例模式 保证一个类只有一个实例&#xff0c;并提供一个访问该实例的全局节点&#xff1b; 2、什么情况下需要单例模式 某个类的对象在软件运行之初就创建&#xff0c;并且在软件的很…

Python高级用法:迭代器(iter)

迭代器 迭代器是一个实现了迭代器协议的容器对象。它基于以下两个方法。 __ next __&#xff1a;返回容器的下一个元素。 __ iter __&#xff1a;返回迭代器本身 迭代器可以利用内置的iter函数和一个序列来创建, 假设我们的序列为[1, 2, 3],迭代器创建过程如下&#xff1a; i…