【字节二面算法题】84. 柱状图中最大的矩形

84. 柱状图中最大的矩形

解题思路

  • 从左向右依次遍历数组中的元素
  • 如果栈为空或者当前考察的新元素值比栈顶元素大,表明以栈顶元素值为高的矩形面积暂时不能确定,将当前考察的元素入栈,在这个条件下,栈中的元素从栈底到栈顶元素依次递增
  • 栈不为空且当前考察的新元素比栈顶元素小,表示栈顶元素为高的矩形面积是可以确定的,矩形的高就是栈顶元素的值,右侧边界就是当前考察的新元素,左侧边界是栈顶元素的前一个元素,因为在上一步中我们知道栈中元素值从栈底到栈顶是一次递增,所以矩形的宽是当前考察的元素索引和栈顶元素的前一个元素的索引差值减一
  • 栈顶元素出栈之后,还是需要看看当前考察的元素是不是还小于新的栈顶元素,如果是继续出栈,然后计算以其值为高得矩形面积,知道新元素值大于栈顶元素,然后新元素入栈
class Solution {public int largestRectangleArea(int[] heights) {// 初始化最终结果0int res = 0;Stack<Integer> stack = new Stack<>();// 存放的是数组索引// 将给定的原数组左右各添加一个元素0  int[] newHeights = new int[heights.length + 2];newHeights[0] = 0;newHeights[newHeights.length - 1] = 0;for(int i = 1; i < heights.length + 1; i++){newHeights[i] = heights[i - 1];// 将原始数组 复制一下}// 遍历当前得元素如果大于等于栈顶元素 那么直接入栈for(int i = 0; i < newHeights.length;i++){// 如果栈不为空  且当前考察的元素值小于栈顶元素值// 那么直接以栈顶元素值为高得矩形面积可以确定while(!stack.isEmpty() && newHeights[i] < newHeights[stack.peek()]){// 弹出栈顶元素  存放的是索引int cur = stack.pop();// 获取栈顶元素对应的高int curHeight = newHeights[cur];// 栈顶元素弹出之后 新的栈顶元素就是左侧边界int leftIndex = stack.peek();// 右侧边界就是当前考察得索引int rightIndex = i;// 计算矩形的宽度int curWidth = rightIndex - leftIndex - 1;// 计算面积res = Math.max(res,curWidth * curHeight);}// 当前考察索引入栈stack.push(i);}return res;}
}

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

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

相关文章

门面模式 Facade Pattern

门面模式 门面模式&#xff08;Facade Pattern&#xff09;&#xff0c;也称之为外观模式&#xff0c;其核心为&#xff1a;外部与一个子系统的通信必须通过一个统一的外观对象进行&#xff0c;使得子系统更易于使用。 在软件开发领域有这样一句话&#xff1a;计算机科学领域…

CQ 社区版 2.8.0 | 支持TiDB、StarRocks,新增列过滤算法、导出模式设置等

Hello&#xff0c;CloudQuery 社区版 2.8.0 已发布&#xff0c;本文将带大家详细解析本次更新的功能~&#xff08;完整的讲解视频可点击 &#x1f449;&#x1f3fb; CloudQuery 社区版2.8.0 功能讲解演示 本期亮点更新 新增支持数据源 TiDB、StarRocks数据保护新增列过滤脱敏…

cmd命令行输出的内容复制粘贴到文本中

cmd程序执行完后按任意键进行结束&#xff0c;无法直接复制命令行里输出的内容&#xff0c;如下图&#xff0c;在Windows系统里按ctrlC&#xff0c;然后该窗口就关闭了&#xff0c;内容也没有复制成功到粘贴板。 解决办法如下&#xff1a; 在上方打开设置 然后在“交互”里打…

JDBC 总结

一、JDBC概述 JDBC&#xff08;Java DataBase Connectivity&#xff09;java数据库连接是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系型数据库提供统一访问&#xff0c; 它由一组用Java语言编写的类和接口组成。有了JDBC,java开发人员只需要编写一次程序,就可以…

Linux系统中虚拟文件系统原理与方法

在 Unix 的世界里&#xff0c;有句很经典的话&#xff1a;一切对象皆是文件。这句话的意思是说&#xff0c;可以将 Unix 操作系统中所有的对象都当成文件&#xff0c;然后使用操作文件的接口来操作它们。Linux 作为一个类 Unix 操作系统&#xff0c;也努力实现这个目标。 虚拟文…

Vue2 和Vue3 有什么区别

一. 根节点不同&#xff1a; vue2中必须要有根标签vue3中可以没有根标签&#xff0c;会默认将多个根标签包裹在一个fragement虚拟标签中&#xff0c;有利于减少内存。 二. 组合式API和选项式API&#xff1a; 在vue2中采用选项式API&#xff0c;将数据和函数集中起来处理&…

LeetCode 2859. 计算 K 置位下标对应元素的和【位操作】1000

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

E4 基于Mysql的游标定义和应用

一、实验目的: 熟练使用MySQL游标的定义和应用。 二、实验要求: 1、基本硬件配置:英特尔Pentium III 以上,大于4G内存&#xff1b; 2、软件要求:Mysql&#xff1b; 3、时间:1小时&#xff1b; 4、撰写实验报告并按时提交。 三、实验内容: 问题1&#xff1a;请写一个存储…

MTP与管理壳(AAS)有异曲同工之妙

在过去的几年中&#xff0c;流程工业中的不同部门&#xff08;例如制药、精细化学品以及食品和饮料部门&#xff09;遇到了一系列共同且可比较的新兴挑战。这些挑战包括&#xff1a; 新产品的需求迅速接连不断&#xff0c;更快交货和更低价格的压力&#xff0c;更多定制产品&a…

【Java并发】聊聊Future如何提升商品查询速度

java中可以通过new thread、实现runnable来进行实现线程。但是唯一的缺点是没有返回值、以及抛出异常&#xff0c;而callable就可以解决这个问题。通过配合使用futuretask来进行使用。 并且Future提供了对任务的操作&#xff0c;取消&#xff0c;查询是否完成&#xff0c;获取结…

面试 Vue 框架八股文十问十答第十期

面试 Vue 框架八股文十问十答第十期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;Vue-Router 的懒加载如何…

代理模式-C#实现

该实例基于WPF实现&#xff0c;直接上代码&#xff0c;下面为三层架构的代码。 目录 一 Model 二 View 三 ViewModel 一 Model using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 设计模式练…

【Linux】进程间通信——信号量

让大家久等啦&#xff0c;本期我们来讲讲Linux系统中的信号量 目录 一、引入 二、认识信号量 2.1 信号量的概念 2.2 信号量的内核结构 三、关于信号量的接口 3.1 semget 3.2 ipcs -s 3.3 ipcrm -s 3.4 semctl 3.5 semop 四、理解IPC 一、引入 在开始之前我们先来认…

2023.1.21 关于 Redis 主从复制详解

目录 引言 单点问题 分布式系统 主从模式 配置 Redis 主从结构 断开主从关系 切换主从关系 补充知识点一 只读 网络延迟 拓扑结构 一主一从 一主多从 树形主从结构 主从复制的基本流程 数据同步 replicationid offset pzync 运行流程 具体流程 补充知识点二…

C. Doremy‘s City Construction(二分图问题)

思路&#xff1a;把集合划分成两部分,一部分中每个数都比另一部分小,这两部分连成一个完全二分图,这种情况是最优的,还需要特判所有数都相等的情况. 代码&#xff1a; void solve(){int n;cin >> n;vector<int>a(n 1);for(int i 1;i < n;i )cin >> a[…

如何使用iPhone或iPad上的二维码共享Wi-Fi密码?这里有详细步骤

你有没有想过在不泄露网络密码的情况下与客人共享你的家庭或工作Wi-Fi?你肯定不是第一个这样想的人,我们很高兴地通知你,多亏了以下这个的变通方法,你现在可以使用iPhone或iPad做到这一点。 通常,如果你想让其他人访问网络,你需要共享你的Wi-Fi密码。苹果通过引入与任何…

python 学习之 re库的基本使用(正则匹配)上

目录 一、基本用法 二、函数介绍 1、match函数 2、search 函数 3、compile 函数 4、findall 和 finditer 函数 5、sub 函数和 subn 函数 6、split 函数 一、基本用法 首先我们需要引入 re 库 代码基本框架使用两行代码实现 测试代码&#xff1a; import reret re.m…

vue 本地中导入 maptalks

1、进入 github 中 maptalks 文件下载页面&#xff08;https://github.com/maptalks/maptalks.js/releases&#xff09; 这里可能会有朋友应为网络问题打不开 github &#xff0c;可以查看作者另一篇关于解决该问题的文章&#x1f449;GitHub 打不开问题解决 2、将下载好的文件…

5V摄像机镜头驱动芯片GC6208,为什么可以替代AN41908,适用于摄像机镜头上

GC6208是一个镜头电机驱动IC摄像机和安全摄像机。该装置集成了一个由PID控制的可变光圈直流电机驱动器和两个通道的扫描隧道显微镜电机驱动器&#xff0c;用于变焦和聚焦控制。AN41908A是一款用于摄像机和安全摄像机的镜头马达驱动IC&#xff0c;具有lris控制功能。电压驱动系统…

深度学习核心技术与实践之深度学习研究篇

非书中全部内容&#xff0c;只是写了些自认为有收获的部分。 Batch Normalization 向前传播 &#xff08;1&#xff09;三个主要任务&#xff1a;计算出每批训练数据的统计量。 对数据进行标准化 对标…