当前位置:网站首页>【力扣刷题】单调栈:84. 柱状图中最大的矩形
【力扣刷题】单调栈:84. 柱状图中最大的矩形
2022-06-26 15:54:00 【李小恩恩子】
题目:
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。

思路:
//单调递增栈,对于栈中的柱体来说,左边第一个高度小于自身的柱体就在自己下方
//遍历每个柱体,若当前的柱体高度大于等于栈顶柱体的,就入栈
//否则就是找到了栈顶元素的右边的第一个小于自身的柱体,出栈栈顶元素,同时可以计算栈顶元素的对应的矩形的最大面积了
//给数组最后一个元素添加一个0,用这个条件来让栈里面所有元素都出栈
//左边特殊处理的话,如果某个栈顶元素出栈后栈为空,说明左边没有元素比它矮,它自己是最矮的,左边可以延申到0
class Solution {
public int largestRectangleArea(int[] heights) {
//单调递增栈,对于栈中的柱体来说,左边第一个高度小于自身的柱体就在自己下方
//遍历每个柱体,若当前的柱体高度大于等于栈顶柱体的,就入栈
//否则就是找到了栈顶元素的右边的第一个小于自身的柱体,出栈栈顶元素,同时可以计算栈顶元素的对应的矩形的最大面积了
//给数组最后一个元素添加一个0,用这个条件来让栈里面所有元素都出栈
//左边特殊处理的话,如果某个栈顶元素出栈后栈为空,说明左边没有元素比它矮,它自己是最矮的,左边可以延申到0
int[] newH = new int[heights.length + 1];
for(int i = 0; i < heights.length;i++){
newH[i] = heights[i];
}
newH[heights.length] = 0;
Stack<Integer> stack = new Stack<>();
int res = 0;
for(int i = 0;i < heights.length + 1;i++){
while(stack.size() != 0 && newH[stack.peek()] > newH[i]){
res = Math.max(res,newH[stack.pop()] * (stack.size() == 0 ? i : (i - stack.peek() - 1)));
}
stack.push(i);
}
return res;
}
}边栏推荐
- 10 tf.data
- Beijing University and Tencent jointly build angel4.0, and the self-developed in-depth learning framework "River map" is integrated into the ecology
- 大话领域驱动设计——表示层及其他
- SVG大写字母A动画js特效
- How to create your own NFT (polygon) on opensea
- Reflection modification final
- C language reading data
- 李飞飞团队将ViT用在机器人身上,规划推理最高提速512倍,还cue了何恺明的MAE...
- R语言广义线性模型函数GLM、glm函数构建逻辑回归模型(Logistic regression)、分析模型是否过离散(Overdispersion)、使用残差偏差与二项式模型中的剩余自由度的比率评估
- 若依如何实现接口限流?
猜你喜欢

NFT 项目的开发、部署、上线的流程(1)

Ten thousand words! In depth analysis of the development trend of multi-party data collaborative application and privacy computing under the data security law

Analyse panoramique de la chaîne industrielle en amont, en aval et en aval de la NFT « Dry goods»

首例猪心移植细节全面披露:患者体内发现人类疱疹病毒,死后心脏重量翻倍,心肌细胞纤维化丨团队最新论文...

NFT合约基础知识讲解

Application of ansible automation

(一)keras手写数字体识别并识别自己写的数字

清华“神奇药水”登Nature:逆转干细胞分化,比诺奖成果更进一步,网友:不靠精子卵子就能创造生命了?!...

2 三种建模方式

svg canvas画布拖拽
随机推荐
股票开户优惠链接,我如何才能得到?在线开户安全么?
8 自定义评估函数
今年高考英语AI得分134,复旦武大校友这项研究有点意思
NFT 项目的开发、部署、上线的流程(2)
Tweenmax+svg switch color animation scene
canvas三个圆点闪烁动画
I want to know how to open an account through online stock? Is online account opening safe?
Svg capital letter a animation JS effect
油田勘探问题
Lifeifei's team applied vit to the robot, increased the maximum speed of planning reasoning by 512 times, and also cued hekaiming's Mae
振动式液量检测装置
Development, deployment and online process of NFT project (2)
Svg rising Color Bubble animation
Quickly get started with federal learning -- the practice of Tencent's self-developed federal learning platform powerfl
Anaconda3安装tensorflow 2.0版本cpu和gpu安装,Win10系统
R语言plotly可视化:小提琴图、多分类变量小提琴图、分组(grouped)小提琴图、分裂的分组小提琴图、每个小提琴图内部分为两组数据、每个分组占小提琴图的一半、自定义小提琴图的调色板、抖动数据点
[time complexity and space complexity]
10 tf. data
Super double efficiency! Pycharm ten tips
LeetCode 单周赛298,前三题