码迷,mamicode.com
首页 > 其他好文 > 详细

5.30——84. 柱状图中最大的矩形

时间:2020-05-30 19:46:59      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:targe   question   最大的   title   ffffff   优化   nbsp   problems   mic   

84. 柱状图中最大的矩形

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

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

技术图片

以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。

 

1.解题思路

  1. 对于一个柱体,如果能得到向左和向右的边界
  2. 那么就能对每个高度求一次面积
  3. 遍历所有高度,即可得出最大面积

上述暴力法的时间复杂度为 O(n²)。考虑用 空间换时间 的方法优化,考虑用单调栈来优化。以上述 [2,1,5,6,2,3] 为例:

①遍历到 2 ,将 2下标 0 压入栈;遍历到 11 比栈顶元素 02 的下标) 0 出栈,然后以高度为 2 的柱体为尾,向左延伸(从栈中取符合条件的栈顶元素)。找到能达到的最大矩形

②找到后,将刚刚的 1下标 1 压入栈,此时栈中元素只有 1 。继续遍历到 5 比 栈顶元素下标 1 的高度 1 大,把 5下标 2 入栈。同理,6下标 3 入栈

③此时栈中元素为 1,2,3 (对应的高度为 1,5,6。遍历到下标 4 ,对应的高度为 2 小于栈顶元素 6 。将下标 3 出栈。

④以高度为 6 的柱体为尾,向左延伸,找到最大的矩形。此时栈顶元素为 2 对应的高度为 5 。并且底边长为:4(出栈时遍历到的下标)- 2(栈顶元素的下标)(出栈时的下标 减去 当前柱体的下标)

⑤此时栈顶元素为 1 对应高为 1 。小于下标 4 对应的高 2 因此,将下标 4 入栈。然后将下标 5 入栈。栈更新为 1,4,5 。而此时对于数组的遍历结束了,栈中还有元素,我们需要继续将栈中的元素取出。

⑥将栈中元素取出。按照上述原则,继续循环构造出尽可能大的矩形

技术图片

 

写的可能不是很好,可以去看官方题解

 

2.源码

技术图片

5.30——84. 柱状图中最大的矩形

标签:targe   question   最大的   title   ffffff   优化   nbsp   problems   mic   

原文地址:https://www.cnblogs.com/xiaoqichaoren/p/12994441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!