首页 > 其他分享 >84. Largest Rectangle in Histogram

84. Largest Rectangle in Histogram

时间:2022-11-15 14:12:18浏览次数:38  
标签:return int max pop height Rectangle Histogram stack 84

Given an array of integers heights representing the histogram's bar height where the width of each bar is 1, return the area of the largest rectangle in the histogram.

 

Example 1:

Input: heights = [2,1,5,6,2,3]
Output: 10
Explanation: The above is a histogram where width of each bar is 1.
The largest rectangle is shown in the red area, which has an area = 10 units.

 

逐个将元素 push 到栈里。push 进去之前先把 > 自己的元素 pop 出来。 每次从栈中 pop 出一个数的时候,就找到了往左数比它小的第一个数(当前栈顶)和往右数比它小的第一个数(即将入栈的数), 从而可以计算出这两个数中间的部分宽度 * 被pop出的数,就是以这个被pop出来的数为最低的那个直方向两边展开的最大矩阵面积。 因为要计算两个数中间的宽度,因此放在 stack 里的是每个数的下标

public static int largestRectangleArea(int[] height) {
if (height == null || height.length == 0) {
return 0;
}

Stack<Integer> stack = new Stack<>(); //维护单调递增
int max = 0;
for (int i = 0; i <= height.length; i++) {
int curt = (i == height.length) ? -1 : height[i];
while (!stack.isEmpty() && curt <= height[stack.peek()]) { //如果栈顶高度大于当前高度
int h = height[stack.pop()]; //保存栈顶元素信息
int w = stack.isEmpty() ? i : i - stack.peek() - 1; //如果栈已经为空,宽度为i,否则i-s.top()-1
max = Math.max(max, h * w);
}
stack.push(i); //压入栈中
}

return max;
}

标签:return,int,max,pop,height,Rectangle,Histogram,stack,84
From: https://www.cnblogs.com/MarkLeeBYR/p/16892231.html

相关文章

  • 白嫖永久服务器1668482460013
    阿贝云服务器注册免费领取1核1g内存5m宽带10g内存的云服务器,对于个人来说完全够用了。还有免费备案和虚拟主机,免备案对于搭建个人博客就很方便,部署了小项目上去,运行流畅不......
  • 白嫖永久服务器1668482615004
    阿贝云服务器注册免费领取1核1g内存5m宽带10g内存的云服务器,对于个人来说完全够用了。还有免费备案和虚拟主机,免备案对于搭建个人博客就很方便,部署了小项目上去,运行流畅不......
  • P8844 [传智杯 #4 初赛] 小卡与落叶
    简要题意给出一个\(n\)个节点的以\(1\)为根的树,每一个节点\(i\)带权\(w_i\),初始时所有节点的权均为\(0\)。有\(m\)个操作,支持以下操作:1x,对于所有树上节点\(......
  • [AGC041F] Histogram Rooks(神仙题 网格 容斥计数)
    [AGC041F]HistogramRooks给定一个\(N\)行\(N\)列的棋盘,第\(i\)行只有\([1,h_i]\)是有格子的,其他都是虚空。一个棋子放在一个格子上,我们称一个格子被一个棋子......
  • CF484B
    首先将序列排序后去重。\(a\bmodb\)可以表示成\(a-kb\)的形式,其中$k=\left\lfloor\dfrac{a}{b}\right\rfloor$。于是发现\(kb\lea\lt(k+1)b\)。那么枚举......
  • 洛谷P8849 『JROI-7』hibernal 二分法题解
    题目链接题目大意:交互题,给定N=2或18或64或512或1000,其中你要通过19次以内的询问在数列1-N中找到给定的未知的两个数x和y(本题解中设x<y),每次询问......
  • 【框架】984- 2021 年最佳 JavaScript 框架
    作者|OliviaCuthbert译者|Sambodhi策划|刘燕据Stackoverflow的2021年开发者调查,JavaScript已连续第八年成为使用最多的语言,有67.7%的受访者选择它。之所以如......
  • CF1684F Diverse Segments
    本题的问题等价于删除一个区间之后是否询问的所有区间都没有相同的数对。记录\(i\)的\(minL_i\)表示包含\(i\)的区间的最小左端点\(maxR_i\)同理,每次删除\(i\)......
  • WGS84与其他地图坐标系互转
    packagecom.xx.common.core.utils.geography;/***WGS84:谷歌地图OMS*火星坐标系:高德地图腾讯地图*百度坐标系:百度地图*/publicclassCoordinateUtil{......
  • 白嫖永久服务器1668059148445
    阿贝云服务器注册免费领取1核1g内存5m宽带10g内存的云服务器,对于个人来说完全够用了。还有免费备案和虚拟主机,免备案对于搭建个人博客就很方便,部署了小项目上去,运行流畅不......