Arithmetic problem | 求n个直方图所含最大的矩形面积
2016-08-11 20:29
281 查看
题目如下:
给出的n个非负整数表示每个直方图的高度,每个直方图的宽均为1,在直方图中找到最大的矩形面积。
以上直方图宽为1,高度为[2,1,5,6,2,3]。
最大矩形面积如图阴影部分所示,含有10单位
样例
给出 height = [2,1,5,6,2,3],返回 10
解题时产生两个思路:
1:每个柱子都按当前位置左右遍历,左右面积加起来就是解。但复杂度相对较高。
2:看这题目,发现很眼熟,其实在之前得博文中已有解题方法,地址在这 Arithmetic
problem | 找二维矩阵权值为1的最大矩形面积,但由于当时是映射出来得,所以也就简化了解析步骤。此思路也算是由思路一演化而来,把递增的直方图归为一体缓存,从而把直方图特化成拥有最高点的“山峰”,那么缓存里的直方图所包含的最大矩形面积也就不会超过缓存的两个极端。从而不用左右横扫多次。
思路二实现代码如下:
给出的n个非负整数表示每个直方图的高度,每个直方图的宽均为1,在直方图中找到最大的矩形面积。
以上直方图宽为1,高度为[2,1,5,6,2,3]。
最大矩形面积如图阴影部分所示,含有10单位
样例
给出 height = [2,1,5,6,2,3],返回 10
解题时产生两个思路:
1:每个柱子都按当前位置左右遍历,左右面积加起来就是解。但复杂度相对较高。
2:看这题目,发现很眼熟,其实在之前得博文中已有解题方法,地址在这 Arithmetic
problem | 找二维矩阵权值为1的最大矩形面积,但由于当时是映射出来得,所以也就简化了解析步骤。此思路也算是由思路一演化而来,把递增的直方图归为一体缓存,从而把直方图特化成拥有最高点的“山峰”,那么缓存里的直方图所包含的最大矩形面积也就不会超过缓存的两个极端。从而不用左右横扫多次。
思路二实现代码如下:
#define max(a,b) a>b?a:b
void Method(vector<int> &t) { int j,l,r,u,m=0; t.push_back(0); stack<int> s; for(j=0; j<(int)t.size(); ++j) { while(!s.empty()&&t[s.top()]>t[j]) { u=s.top(),s.pop(); l=(s.empty()?u+1:u-s.top())*t[u]; r=(j-u-1)*t[u]; m=max(l+r,m); } s.push(j); } printf("%d",m); }
相关文章推荐
- LeetCode 84. Largest Rectangle in Histogram(直方图中最大矩形面积)
- 庞果网之寻找直方图中面积最大的矩形
- 直方图最大矩形面积
- [算法]CSDN编程挑战赛之寻找直方图中面积最大的矩形
- 计算直方图中面积最大的矩形
- 寻找直方图中面积最大的矩形
- 直方图内最大矩形 DP 固定左边(遍历可固定),移动右边(便历移动),调整最大面积
- [算法]CSDN编程挑战赛之寻找直方图中面积最大的矩形
- 庞果英雄会---寻找直方图中面积最大的矩形---编程挑战
- 寻找直方图中面积最大的矩形
- 求直方图中最大矩形面积(C语言实现)
- 直方图中最大矩形面积
- 寻找直方图中面积最大的矩形 --- 庞果网
- 寻找直方图中面积最大的矩形
- 每天一道LeetCode-----计算直方图中最大矩形的面积
- 寻找直方图中面积最大的矩形--英雄会
- 庞果英雄会---寻找直方图中面积最大的矩形---编程挑战
- 寻找直方图中面积最大的矩形
- 直方图中最大矩形面积
- 直方图最大矩形面积--c/c++