博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】84. Largest Rectangle in Histogram 最大面积的覆盖矩阵
阅读量:5942 次
发布时间:2019-06-19

本文共 1692 字,大约阅读时间需要 5 分钟。

1. 题目

Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.

图片描述

Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3].

图片描述

The largest rectangle is shown in the shaded area, which has area = 10 unit.

For example,

Given heights = [2,1,5,6,2,3],
return 10.

2. 思路

用栈来模拟,遍历heights数组,如果大于栈顶元素,就push进去;否则,持续弹栈来计算从栈顶点到降序点的矩阵大小。然后将这一部分全部替换为降序点的值,即做到了整体依然是有序非降的。

整个过程中,即把所有的局部最大矩阵计算过了,又在宽度范围内保留了全部的场景。
举例,2,1,5,6,3的场景。
先加入一个0,方便最后可以全部弹栈出来。变成:2,1,5,6,3,0.
2进栈,1比栈顶小,对2进行出栈,area = 2;
2被替换为1进栈,1继续进栈,这是栈为1,1;
5,6都是非降的,继续进栈,栈为1,1,5,6;
遇到3,是一个降序点;开始弹栈,6出栈,对应area=61; 5出栈对应area=52;下一个1比3小,不需要弹栈。然后将5、6的弹栈后的空位压栈为3,这是栈为1,1,3,3,3;
下一步遇到0,开始依次出栈,得到area=31,32,33,14,1*5。
遍历结束。整个过程中max的area为10.

在整个过程中,将每一个点作为起点,到各个波峰最大的几个矩阵都计算过一次,即保证了每个点作为起点的最大矩阵可能性都试探过。

3. 代码

耗时:13ms

class Solution {public:    int largestRectangleArea(vector
& heights) { int max_area = 0; heights.push_back(0); int sz = heights.size(); int stack[sz]; stack[0] = heights[0]; int stack_idx = 0; int i = 1; while (stack_idx >= 0 && i < sz) { if (heights[i] >= stack[stack_idx]) { stack[++stack_idx] = heights[i++]; continue; } while (stack_idx >= 0 && stack[stack_idx] > heights[i]) { int area = stack[stack_idx] * (i - stack_idx); if (area > max_area) { max_area = area; } stack_idx--; } while (stack_idx < i) { stack[++stack_idx] = heights[i]; } i++; } return max_area; }};

转载地址:http://eiqtx.baihongyu.com/

你可能感兴趣的文章
宏定义与const的区别
查看>>
java中abstract,interface,final,static的区别
查看>>
网站的线下活动如何组织
查看>>
Mac 常用快捷键
查看>>
阿里云CentOS7安装Oracle11GR2
查看>>
多线程之线程同步
查看>>
图片进行base64编解码方法
查看>>
外链起到引导、推广排名的作用
查看>>
python常用的字串格式化选项
查看>>
Lock wait timeout exceeded; try restarting......
查看>>
Servet映射规范翻译
查看>>
手机APP新“战场” 手机银行APP成了银行业的定时炸弹?
查看>>
pyhon 函数
查看>>
关于sybase数据库的锁
查看>>
素数判断
查看>>
Web Service 概念
查看>>
oracle lob 简单介绍
查看>>
H3C V7平台下的IRF堆叠
查看>>
rpm命令
查看>>
面试心得
查看>>