【单调栈】力扣85.最大矩形

news/2024/5/17 18:22:23

好久没更新了 ~ 我又回来啦!

两个好消息:

  • 我考上研了,收到拟录取通知啦!
  • 开放 留言功能 了,小伙伴对于内容有什么疑问可以在文章底部评论,看到之后会及时回复大家的!

前面更新过的算法,二叉树递归、动态规划、单调栈 小伙伴们学的怎么样了?


今天我们继续更新 单调栈 的题目,一起学习吧!

(还没看过前几篇介绍的小伙伴赶快关注,在 「单调栈」 合集里查看哦!)


力扣85.最大矩形

给定一个仅包含 0 和 1 、大小为 rows * cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例 1 :

输入: matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]

输出: 6

解释: 如图

思路分析

上道题目我们解决了柱状图的问题,我们来思考一下,是否能够将此题也转化为与柱状图类似的思路呢?当然可以。

来看下面这个对比图,是不是很类似呀:

阴影部分都是矩形。

因此,我们可以将矩阵中每列 1 的个数看做是右侧的柱状图的高度,这样两道题目就 划归 到一起了。

关键点: 以某一行作为底边,看必须以这一行为底的矩阵每列的最大高度是多少。从而转化为 上道题目。

所以,我们的首要任务是,统计出以该行为底的高度是多少,之后再调用上道题的代码求解出矩形面积即可。


根据 上一篇 总结的经验,只需考虑在含有相同值时,最后一个相同元素是否能够将答案计算正确呢?答案是可以的

这里就不再赘述了,不太懂的小伙伴可以去查看上一篇文章哦 ~

代码

public static int maximalRectangle(char[][] map) {if (map == null || map.length == 0 || map[0].length == 0) {return 0;}int maxArea = 0;int[] h = new int[map[0].length];for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[0].length; j++) {h[j] = map[i][j] == '0' ? 0 : h[j] + 1;}// 调用上道题目的 求最大矩形的面积函数maxArea = Math.max(maxRecFromBottom(h),maxArea);}return maxArea;
}

这里的 maxRecFromBottom() 函数就是上篇文章的 largestRectangleArea1() 函数哦!一样的套路 ~

代码解释

这里采用了 压缩数组 的方式进行计算(这个思想在 动态规划专题 中也练习过哦~)。

一维数组 h[map[0].length] 用来存放当前所在行的信息:以当前行为底,第 j 列的高度为多少。

注意:

  • 如果当前位置为 0 时,数组值归 0 。(当然不能以 0 为底啦)!
  • 否则,上一行此位置的值 + 1,就是当前此位置 1 的最大的高度。

得到了柱状图的高度大小之后,就划归成了计算柱状图的最大面积了,直接套用 上道题的代码 即可~

~ 点赞 ~ 关注 ~ 星标 ~ 不迷路 ~!!!

关注回复「ACM紫书」获取 ACM 算法书籍~

记得转发哦!


http://www.mrgr.cn/p/14351052

相关文章

重构国内游戏账号登录系统的思考和实践

本期作者 背景 账号登录系统&#xff0c;作为游戏发行平台最重要的应用之一&#xff0c;在当前的发行平台的应用架构中&#xff0c;主要承载的是用户的账号注册、登录、实名、防沉迷、隐私合规、风控等职责。合规作为企业经营的生命线&#xff0c;同时&#xff0c;账号登录作为…

在线编辑器 CodeMirror

如何优雅的在网页显示代码 如果开发在线编辑器 引入资源&#xff1a; <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.60.0/codemirror.min.css"><script src"https://cdnjs.cloudflare.com/ajax/libs/c…

AI极速批量换脸!Roop-unleashed下载介绍,可直播

要说AI换脸领域,最开始火的项目就是Roop了,Roop-unleashed作为Roop的嫡系分支,不仅继承了前者的强大基因,更是在功能上实现了重大突破与升级 核心特性 1、可以进行高精度的图片、视频换脸,还能实时直播换脸,换脸效果真实、自然 2、不仅支持N卡处理程序(cuda),还额外提…

AI大模型日报#0416:李飞飞《2024年人工智能指数报告》、Sora加入Adobe、李彦宏聊百度大模型之路

​导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。标题: 刚刚&#xff0c;李飞飞团队发布《2024年人工智能指数报告》&#xff1a;10大趋势&#xff0c;揭示AI大模型的“喜”与“忧” 摘…

uni-app如何生成骨架屏

为什么需要骨架屏&#xff1a;为了缓解用户打开程序时等待接口的焦虑情绪 1.打开微信开发者工具&#xff0c;找到模拟器中的页面信息&#xff0c;选择生成骨架屏 2.将生成的wxml代码复制到vscode&#xff0c;在index的components中新建一个vue文件&#xff0c;只需保留请求接口…

使用Lagent AgentLego 搭建智能体

对于这个作业,这里只给出截图,不给详细过程,因为确实没有什么好写的。具体的步骤可以查看官方教程。 作业要求 基础作业完成 Lagent Web Demo 使用,并在作业中上传截图。文档可见 Lagent Web Demo 完成 AgentLego 直接使用部分,并在作业中上传截图。文档可见 直接使用 Age…

CentOS7 boa服务器的搭建和配置

环境是CentOS7&#xff0c;但方法不局限于此版系统&#xff0c;应该是通用的。 具体步骤如下&#xff1a; 1. 下载boa源码 下载地址: Boa Webserver 下载后&#xff0c;进入压缩包所在目录&#xff0c;进行解压&#xff1a; tar xzf boa-0.94.13.tar.gz 2. 安装需要的工具b…

RILIR 复现 一些 idea

伪代码:在 if done 的时候,在环境中已经跑了一个 trajectory 了,利用当前的 trajectory 和专家的 demo 求一下 reward(文章中用的是 optimal transport 的几种方法) 否则,就继续在 observation 的基础上利用 actor 学到的策略 sample 出 action,并用 list 记录下当前的 …

PolarDB MySQL 版 Serverless评测|一文带你体验什么是极致弹性|后续

PolarDB MySQL 版 Serverless评测|一文带你体验什么是极致弹性|后续 弹性压测三后续自动缩容全局一致性测试测评体验 在上一篇PolarDB MySQL 版 Serverless测评博文中&#xff1a;https://developer.aliyun.com/article/1385834 关于弹性压测三通过增加只读节点压测来观测到Ser…

【C语言】多字节字符、宽字符(涉及字符集和编码)

字符集、编码&#xff1a; 字符集&#xff1a;一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称&#xff0c;包括各国家文字、标点符号、图形符号、数字等。例如&#xff1a;ASCII、Unicode、GB2312、GBK、GB18030、BIG5(繁体中文) ... 编码方式&#xff1a;符号…

【React】Ant Design自定义主题风格及主题切换

Ant Design 的自定义主题&#xff0c;对于刚入手的时候感觉真是一脸蒙圈&#xff0c;那今天给它梳理倒腾下&#xff1b; 1、自定义主题要点 整体样式变化&#xff0c;主要两个部分&#xff1a; 1.1、Design Token https://ant.design/docs/react/customize-theme-cn#theme 官…

MySQL基础-----约束详解

目录 一. 概述: 二.约束演示&#xff1a; 三.外键约束&#xff1a; 3.1介绍&#xff1a; 3.2外键约束语法&#xff1a; 3.3删除&#xff0c;更新行为&#xff1a; 一. 概述: &#x1f9d0;&#x1f9d0;概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制…

LCD显示器 --- 8080接口 和 RGB接口 的区别

主要介绍LCD显示的基本原理,涉及像素、分辨率、颜色模型、RGB888等格式、Framebuffer、8080接口、RGB接口。 1.LCD显示出图片的基本原理 LCD作为显示器,它的显示原理和图片是一样的。 图片可以看作由一个一个点(即像素pixel)组成。每行有xres个像素,有yres行,则这个图片的分…

Vue 3 项目构建与效率提升:vite-plugin-vue-setup-extend 插件应用指南

一、Vue3项目创建 前提是已安装Node.js&#xff08;点击跳转Node官网&#xff09; npm create vuelatest这一指令将会安装并执行 create-vue&#xff0c;它是 Vue 官方的项目脚手架工具。你将会看到一些诸如 TypeScript 和测试支持之类的可选功能提示&#xff1a; ✔ Projec…

Ubuntu 22.04 解决和 Windows 共享蓝牙设备的问题

我有一个 Airpods,连接到 WIndows 可以正常工作,但连接到 ubuntu 后会无法连接,只能删除设备选择重联,但是这又会导致 Windows 不能连接到耳机,只能也删除重新连接,费神费力。 要解决此问题,仍有两办法,让 Windows 将就 Linux,或者 Linux 将就 Windows,由于折腾注册表…

【STM32+HAL库】---- 驱动MAX30102心率血氧传感器

硬件开发板:STM32F407VET6 软件平台:cubemax+keil+VScode1 MAX30102心率血氧传感器工作原理 MAX30102传感器是一种集成了红外光源、光电检测器和信号处理电路的高度集成传感器,主要用于心率和血氧饱和度的测量。以下是MAX30102传感器的主要特点和工作原理:红外光源:MAX301…

OO第一次博客作业

OO第一次博客作业 目录1.前言 2.设计与分析 3.采坑心得 4.改进建议 5.总结 1.前言 正则表达式是java语言中一种非常重要的语言,他的重要性主要体现在以下方面: 1.高效的文本处理:正则表达式提供了一种高效的方式来处理文本数据。它可以快速地进行字符串的搜索、匹配、替换和…

【机器学习】数据变换---小波变换特征提取及应用案列介绍

引言 在机器学习领域&#xff0c;数据变换是一种常见且重要的预处理步骤。通过对原始数据进行变换&#xff0c;我们可以提取出更有意义的特征&#xff0c;提高模型的性能。在众多数据变换方法中&#xff0c;小波变换是一种非常有效的方法&#xff0c;尤其适用于处理非平稳信号和…

JVM——面试

https://juejin.cn/post/6998527815964426271 https://juejin.cn/post/7101120209540349959垃圾回收器 Serial(新生代)+ Serial Old(老年代) 特点:单线程垃圾回收器,垃圾回收过程中需要 STW,适用于运行在 Client 模式下的虚拟机; 新生代标记复制算法,老年代标记整理算法…

内存分配器

内存分配器 文章目录 内存分配器项目介绍内存池介绍池化技术内存池内存池主要解决的问题malloc 实现定长内存分配器怎么控制定长通过系统调用申请空间定长内存分配器中应该包含哪些成员变量内存池如何管理释放的对象内存分配器如何为我们申请对象定长内存池整体代码性能对比 高…