单调栈最后一天

目录

84.柱状图中最大的矩形

看到题目时的第一想法

看到代码随想录的想法

实现时出现的困难


84.柱状图中最大的矩形

力扣题目链接(opens new window)

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

在该柱状图中,能够勾勒出来的矩形的最大面积。

看到题目时的第一想法

想到用单调栈,但是不知道怎么做

看到代码随想录的想法

单调栈,单调减,若遇到比栈顶小的元素则出栈

以栈顶为基准来算最大面积,找左边第一个比自己小的下标,遍历过的元素,栈顶第二个元素

                                                找右边第一个比自己小的下标,当前遍历到的元素(若比栈顶小)

   

两者下标之差值-1,就是宽度,当前栈顶就是高度

实现时出现的困难

        开始没理解怎么找左右比当前小的元素,其实只要把当前元素当成栈顶元素,就很好区分了(之前把遍历到的元素当成当前元素了)

        计算面积时,用栈顶元素当成高,左右下标的差值-1当成宽度,来计算

class Solution {public int largestRectangleArea(int[] heights) {//遇到一个较大的,往前计算?//单调栈之前是怎么做的//遇到第一个比自己大的,元素,。//遇到第一个比自己小的来计算?//因为它是计算最大面积,是从最小下标开始看大小的//单调栈:遇到第一个比当前元素大的然后弹出?逐个计算?//逐个计算//卡哥思路,单调栈,不过是单调递减,当我们遇到左边第一个比它小的元素和右边第一个比它小的元素,计算矩形的面积//如何记录下标呢,栈里存下标,然后获取//当前元素为栈顶元素,当遇到第一个比栈顶元素小的,开始回收面积//遇到的第一个比栈顶元素小的,为右边第一个比它小的元素,左边第一个比它小的元素为,栈顶第二个元素Stack<Integer> stack = new Stack<>();//使用一个新数组,左右补0//为什么要补0?若为递减的数组,永远找不到第一个比栈顶小的元素,所以要在最后补0//前面补0,考虑第一个元素,要找到左边比它小的,所以需要补个0int[] newHeights = new int[heights.length+2];newHeights[0] = 0;newHeights[heights.length+1]=0;for(int i=0;i<heights.length;i++){newHeights[i+1] = heights[i];}stack.push(0);int result = 0;for(int i=1;i<newHeights.length;i++){//若当前元素比栈顶的要大直接入栈if(newHeights[i]>=newHeights[stack.peek()]){stack.push(i);}else{while(!stack.isEmpty()&&newHeights[i]<newHeights[stack.peek()]){//当前元素int item = stack.pop();//找到了左边比它小的和右边比它小的,要怎么计算呢//左边比它小的下标-右边比它小的下标-1if(!stack.isEmpty()){//right 应该为iint right = i;//left 应该为peekint left = stack.peek();result = Math.max((right-left-1)*newHeights[item],result);}}stack.push(i);}}return result;}
}

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

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

相关文章

XML详细介绍

文章目录 一、XML二、XML基本语法三、XML常见问题四、XML和HTML有什么区别和优缺点五、热门文章 一、XML XML&#xff08;可扩展标记语言&#xff09;是一种标记语言&#xff0c;用于描述数据的结构和含义。它被设计用来存储和传输数据&#xff0c;并可以用于创建自定义的标记…

03 Verilog HDL 语法

Verilog HDL&#xff08;Hardware Description Language&#xff09;是在 C 语言的基础上发展起来的一种硬件描述语言&#xff08;用它可以表示逻辑电路图、逻辑表达式、数字逻辑系统所完成的逻辑功能等&#xff09;具有灵活性高、易学易用等特点。Verilog HDL 可以在较短的时间…

【DeepLearning-10】yolo.py文件关键代码parse_model(d, ch)函数

这段代码功能是根据提供的配置字典&#xff08;d&#xff09;和输入通道列表&#xff08;ch&#xff09;来解析并构建一个YOLOv5模型。函数的核心工作是遍历模型的每一层&#xff0c;并根据配置创建相应的神经网络层。 我们可以在函数中为新增模块配置构造参数设置。 函数中 f…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-3 getBoundingClientRect()

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>getBoundingClientRect()</title> </head> <script>function getRect(){var obj document.getElementById(example); //获取元素对象var objR…

【数据结构1-3】集合

有时候&#xff0c;我们并不关心数据之间的前后关系&#xff0c;也不关心数据的层次关系。一些确定元素只是单纯的聚集在一起&#xff0c;这样的元素聚集体被称为集合。 当希望知道某个数据是否存在一个集合中&#xff0c;或者两个元素是否在同一个集合中时&#xff0c;就需要使…

IP关联是什么?有什么后果?如何防止电商账号因IP关联被封?

在跨境电商的世界里&#xff0c;IP关联给多账号运营的商家带来了挑战。比如&#xff0c;亚马逊IP关联规则的执行对于那些经营多个店铺的卖家来说可能是一个不小的障碍。IP关联的影响不只是限于亚马逊&#xff0c;其他平台如Instagram、Facebook也有类似的机制&#xff0c;在之前…

web架构师编辑器内容-添加自动保存的功能

对于频繁改动的应用&#xff0c;自动保存的功能是一个非常有用的功能&#xff0c;可以避免用户在没有保存的情况下丢失自己保存过的数据。 对于自动保存&#xff0c;一般有两种实现&#xff0c;参考语雀和石墨&#xff1a; 语雀采用的是定时保存的方式&#xff0c;大约在3分半…

PHP语法

#本来是在学命令执行&#xff0c;所以学了学&#xff0c;后来发现&#xff0c;PHP语法和命令执行的关系好像没有那么大&#xff0c;不如直接学php的一些命令执行函数了。# #但是还是更一下&#xff0c;毕竟还是很多地方都要求掌握php作为脚本语言&#xff0c;所以就学了前面的…

HR:年底了如何分钱,比亏钱更可怕的是“亏”员工

年底了&#xff0c;很多企业家朋友在聊一个话题&#xff1a;如何分钱&#xff0c;激励员工创造更大的价值&#xff1f;分钱很重要&#xff0c;但分钱也特别难。 钱分对了&#xff0c;管理的一大半问题就解决了。钱分得不对&#xff0c;一大堆新的问题就出现了。最坏的结果&…

514.自由之路

一个字符串 ring ,表示刻在外环上的编码;给定另一个字符串 key ,表示需要拼写的关键词。您需要算出能够拼写关键词中所有字符的最少步数。 最初,ring 的第一个字符与 12:00 方向对齐。您需要顺时针或逆时针旋转 ring 以使 key 的一个字符在 12:00 方向对齐,然后按下中心按…

docker真的好难用啊,为什么说它移植性好啊?

对于首次接触 Docker 新人来说&#xff0c;Docker 确实存在一定的门槛&#xff0c;主要可能需要适应的几个点如下&#xff1a; 1、 概念理解&#xff1a; Docker 自身引入了很多新概念&#xff0c;比如镜像&#xff08;Image&#xff09;、容器&#xff08;Container&#xff…

HTML新手教程

HTML入门 教程&#xff1a;【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一.初识HTML HyperTextMarkupLanguage&#xff08;超文本标记语言&#xff09; 超文本包括&#xff1a;文字、图片、音频、视频、动画。 HTML5的优势 世界知名浏览器厂商对HTML5的支持市场的…

无人值守变电所运维在海南市某住宅区的应用

1 前言 随着国家电网改革政策的逐步推进和落实&#xff0c;AcrelCloud-1000变电所运维云平台运用互联网和大数据技术&#xff0c;为电力运维公司提供变电所运维云平台。该平台作为连接运维单位和用电企业的纽带&#xff0c;监视用户配电系统的运行状态和电量数据&#xff0c;为…

Vue3使用setup-extend简化组件名写法

如果我们在Vue3中要使用setup的语法糖&#xff0c;就需要使用两个script标签&#xff0c;一个用于设置组件的name属性&#xff0c;一个用于编写setup中的代码。如下&#xff1a; 但是我们有觉得光是因为一个name属性就多写一个script标签有点麻烦了。 因此我们可以使用插件来进…

【Python笔记-设计模式】抽象工厂模式

一、说明 (一) 解决问题 抽象工厂是一种创建型设计模式&#xff0c;主要解决接口选择的问题。能够创建一系列相关的对象&#xff0c;而无需指定其具体类。 (二) 使用场景 系统中有多于一个的产品族&#xff0c;且这些产品族类的产品需实现同样的接口。 例如&#xff1a;有…

AI对话软件哪个好?首选这3款堪称神器的AI工具!

在过去的一年里&#xff0c;AI对话软件无疑深度嵌入到了我们工作或生活的方方面面&#xff0c;成为了我们的得力助手。它们可以帮我们解决问题&#xff0c;提供信息&#xff0c;甚至陪伴我们度过孤独的时刻。 但是&#xff0c;面对市场上数量众多的AI对话软件&#xff0c;你是…

arcgis 批量删除字段

一、打开ArcToolbox-数据管理工具-字段-删除字段。 二、在输入表中选择要删除字段的要素&#xff0c;在删除字段栏中选择要删除的字段&#xff0c;点击确认即可。

【C语言】深入理解指针(4)回调函数

目录 回调函数 回调函数的应用 i&#xff0c;简化代码逻辑 ii&#xff0c;实现上下机之间的通讯 回调函数 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另⼀个函数&#xff0c;当这个指针被用来调用其所指向…

嵌入式软件工程师面试题——2025校招社招通用(C/C++)(四十五)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…

老龄化对投资意味着什么?

1月15日&#xff0c;国务院办公厅印发《关于发展银发经济增进老年人福祉的意见》从4个方面提出26项举措&#xff0c;为我国首个以“银发经济”命名的政策文件。 近期&#xff0c;国信证券分析师王开发布题为《银发经济再思考&#xff1a;老龄化对投资的影响》的报告&#xff0…