代码随想录day63 | 单调栈P3 | ● 84.

84.柱状图中最大的矩形

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

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

示例 1:

输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10

示例 2:

输入: heights = [2,4]
输出: 4

思路

单调栈 找到左边与 右边第一个更小元素, 然后按照当前元素高 * 左右之间的宽 取最大值 

本地单调栈的解法和接雨水的题目是遥相呼应的。

为什么这么说呢,42. 接雨水 (opens new window)是找每个柱子左右两边第一个大于该柱子高度的柱子,而本题是找每个柱子左右两边第一个小于该柱子的柱子。

这里就涉及到了单调栈很重要的性质,就是单调栈里的顺序,是从小到大还是从大到小

单调栈的顺序总结:

 739. 每日温度 (opens new window)中求一个元素右边第一个更大元素,单调栈是递增的,84.柱状图中最大的矩形 (opens new window)求一个元素右边第一个更小元素,单调栈是递减的。

代码

class Solution {public int largestRectangleArea(int[] heights) {// 数组扩容,在头和尾各加入一个元素int [] newHeights = new int[heights.length + 2];newHeights[0] = 0;newHeights[newHeights.length - 1] = 0;for (int index = 0; index < heights.length; index++){newHeights[index + 1] = heights[index];}heights = newHeights;Deque<Integer> st = new LinkedList<>();st.push(0);int len = heights.length;int S = 0;for(int i = 1; i <  heights.length; i++){if (heights[i] > heights[st.peek()]) {st.push(i);} else if (heights[i] == heights[st.peek()]) {st.pop(); // 这个可以加,可以不加,效果一样,思路不同st.push(i);} else{while(!st.isEmpty() && heights[i] < heights[st.peek()]){int mid = st.pop();int start = st.peek();int end = i;S = Math.max(S, getS(heights, start, end, mid));}st.push(i);}}//res[i] 记录 i右侧第一个小于它的元素的索引, 循环数组记录return S;}public int getS(int [] height, int start, int end, int mid){int h = height[mid];int S = 0;for(int i = start + 1; i < end; i++){S += h;}return S;}
}

计算面积的小优化: 不再选择遍历 而是直接相乘

class Solution {public int largestRectangleArea(int[] heights) {// 数组扩容,在头和尾各加入一个元素int [] newHeights = new int[heights.length + 2];newHeights[0] = 0;newHeights[newHeights.length - 1] = 0;for (int index = 0; index < heights.length; index++){newHeights[index + 1] = heights[index];}heights = newHeights;Deque<Integer> st = new LinkedList<>();st.push(0);int len = heights.length;int S = 0;for(int i = 1; i <  heights.length; i++){if (heights[i] > heights[st.peek()]) {st.push(i);} else if (heights[i] == heights[st.peek()]) {st.pop(); // 这个可以加,可以不加,效果一样,思路不同st.push(i);} else{while(!st.isEmpty() && heights[i] < heights[st.peek()]){int mid = st.pop();int start = st.peek();int end = i;//(start, end)中的元素个数int w = end - start - 1;int h = heights[mid];S = Math.max(S, w * h);}st.push(i);}}//res[i] 记录 i右侧第一个小于它的元素的索引, 循环数组记录return S;}
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于yolov8的水果检测系统,系统既支持图像检测,也支持视频和摄像实时检测(pytorch框架)【python源码+UI界面+功能源码详解】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于yolov8的水果检测系统&#xff0c;系统既支持图像检测&#xff0c;也支持视频和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov8的水果检测系统是在pytorch框架下实…

12.买卖股票的最佳时机 II

文章目录 题目简介题目解答解法一&#xff1a;贪心(遍历数组买入即卖)代码&#xff1a;复杂度分析&#xff1a; 解法二&#xff1a;动态规划(双数组)代码&#xff1a;复杂度分析&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 122. 买卖股票的最佳时…

springboot基本使用九(redis和springcache缓存)

为什么使用缓存: 减少数据库访问次数,从而提高应用程序的性能 redis可以缓存为啥要和spring cache一起使用? redis缓存:是内存级的缓存。它是使用单纯的内存来进行缓存 spring cache缓存:使用JVM的内存来缓存对象的,这势必会造成大量的内存消耗。但好处是显然的:使用方…

目标检测算法YOLOv8简介

YOLOv8论文尚未发布&#xff0c;YOLOv8由Ultralytics公司推出并维护&#xff0c;源码见&#xff1a;https://github.com/ultralytics/ultralytics &#xff0c;于2024年1月发布v8.1.0版本&#xff0c;最新发布版本为v8.2.0&#xff0c;License为AGPL-3.0。 以下内容主要来自&am…

东南亚服务器租用托管的优势

东南亚地区在国际贸易领域展现出了巨大的潜力和吸引力&#xff0c;其未来的外贸发展前景被认为是广阔且充满了无限商机。这一地区以其人口众多、经济快速发展的特点&#xff0c;结合独特的地理优势和丰富的自然资源&#xff0c;正在吸引全球企业的目光。今天我们一起来看看东南…

QT学习(2)——qt的菜单和工具栏

目录 引出qt的菜单栏工具栏菜单栏&#xff0c;工具栏状态栏&#xff0c;浮动窗口 属性设计ui编辑控件添加图片 总结 引出 QT学习&#xff08;2&#xff09;——qt的菜单和工具栏 qt的菜单栏工具栏 菜单栏&#xff0c;工具栏 1QMainWindow 1.1菜单栏最多有一个 1.1.1 QMenuBar…

使用Three.js绘制快速而逼真的水

本文将利用GPUComputationRenderer来实现水波纹的绘制&#xff0c;相似的案例可以看threejs官方的GPGPU Water示例。更多精彩内容尽在数字孪生平台。 什么是 GPGPU GPGPU代表通用图形处理单元&#xff08;General-Purpose Graphic Processing Unit&#xff09;&#xff0c;意思…

T型三电平逆变器的Simulink仿真

1 T型三电平拓扑的开关状态 图1为T字型-三电平电路单相拓扑&#xff0c;拓扑中共有4个IGBT&#xff0c;4个二极管&#xff0c;还有电容组C1和C2&#xff1b;假设正负母线电压均等&#xff0c;都是Vdc。将T1&#xff0c;T2&#xff0c;T3&#xff0c;T4的状态用1和0分别表示&…

AI + Web3 如何打造全新创作者经济模型?

可编程 IP 的兴起&#xff0c;借助人工智能极大提高创作效率和效能&#xff0c;让 Web3 用户体会到了自主创作和产品制作的乐趣。然而&#xff0c;你知道 AI 时代来临的背景下&#xff0c;创作者经济模型又该如何在 Web3 技术的加持下走向更成熟的运作轨道吗&#xff1f;第 43 …

手机恢复出厂设置会怎么样?一切回到了原点?

随着智能手机的普及&#xff0c;我们每天都在与手机紧密互动&#xff0c;里边存储了大量的个人信息和应用数据。然而&#xff0c;有时候我们会遇到手机卡顿、应用崩溃或数据丢失的问题。这时&#xff0c;恢复出厂设置成为了许多人的选择。那么&#xff0c;手机恢复出厂设置会怎…

网站访问提示不安全怎么办??

当网站访问时提示“不安全”&#xff0c;这通常与网站的SSL证书有关&#xff0c;或者是网站本身存在一些安全风险。以下是一些解决步骤和建议&#xff1a; 1、检查URL前缀&#xff1a;首先&#xff0c;检查URL是否以https://开头。如果仍然是http://&#xff0c;则网站没有使用…

详解GaussDB(DWS)中的行执行引擎

1.前言 GaussDB&#xff08;DWS&#xff09;包含三大引擎&#xff0c;一是SQL执行引擎&#xff0c;用来解析用户输入的SQL语句&#xff0c;生成执行计划&#xff0c;供执行引擎来执行&#xff1b;二是执行引擎&#xff0c;其中包含了行执行引擎和列执行引擎&#xff0c;执行引擎…

盘点自动驾驶的技术发展趋势

自动驾驶技术在不断发展变快&#xff0c;我们之前提过算法岗如今越来越卷&#xff0c;从今年的就业局势看&#xff0c;前年还属于蓝海行业的自动驾驶&#xff0c;今年就已经满满关上了招揽之门——呈红海之势。作为在这个行业中摸爬滚打的一以子&#xff0c;我们到底该如何纵观…

agiletc部署

数据库创建及运行 启动命令 cd /AgileTC/case-server&& nohup mvn spring-boot:run &查看是否启动成功 http://192.168.101.:8094/case/caseList/1需要安装java javac等 一、安装java 1 安装java11 sudo yum install java-11-openjdk-devel -y2 切换到java11 …

c++ 获取机器码

看到网上代码代码都没什么好的&#xff0c;自己备用一个 #include <iostream> #include <string> #include <sstream> #include <iomanip> #include <Windows.h> #include <iphlpapi.h> // 包含这个头文件以获取 PIP_ADAPTER_INFO #inclu…

【NodeMCU实时天气时钟温湿度项目 4】通过NTPClient库获取实时网络时间并显示在TFT屏幕上

今天是【实时天气时钟温湿度项目】第四专题&#xff0c;主要内容是&#xff1a;学习导入NTPClient库&#xff0c;通过这个库获取实时网络时间&#xff0c;显示在1.3寸TFT液晶屏幕上。此前三个专题&#xff0c;请选择查看以下链接。 第一专题内容&#xff0c;请参考 【N…

阿里云和AWS负载均衡服务对比分析

在云计算时代,负载均衡作为一种关键的网络基础设施,承担着在多个服务器之间分发网络流量的重要任务。作为全球两大主要的云服务提供商,阿里云和Amazon Web Services(AWS)都提供了强大的负载均衡解决方案。本文将从性能、功能、可用性和成本等方面对两者进行对比分析。我们九河云…

this指针详解

目录 this指针this指针的引出this指针的特性this指针相关例题例题1例题2 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&#x1f978; C语言 &#x1f43f;️&#x1f43f;️…

【UE Niagara】在UI上生成粒子

效果 步骤 1. 在虚幻商城中将“Niagara UI Render”插件安装到引擎 2. 打开虚幻编辑器&#xff0c;勾选插件“Niagara UI Renderer”&#xff0c;然后重启编辑器 3. 先创建一个控件蓝图&#xff0c;该控件蓝图只包含一个按钮 这里设置尺寸框尺寸为200*50 4. 显示该控件 5. 新…

3月笔记本电脑行业线上市场销售数据分析

笔记本电脑市场在过去几年中经历了起伏&#xff0c;但总体上呈现出稳定增长的态势。特别是随着远程办公、在线学习等需求的增加&#xff0c;以及消费者对于便携性、高性能等方面的追求&#xff0c;笔记本电脑市场得到了进一步的发展。 据鲸参谋数据统计&#xff0c;线上平台&a…