Largest Rectangle in Histogram 一排矩形中的最大的面积
2015-09-23 15:44
453 查看
Largest Rectangle in Histogram
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.![](http://www.leetcode.com/wp-content/uploads/2012/04/histogram.png)
Above is a histogram where width of each bar is 1, given height =
[2,1,5,6,2,3].
![](http://www.leetcode.com/wp-content/uploads/2012/04/histogram_area.png)
The largest rectangle is shown in the shaded area, which has area =
10unit.
For example,
Given height =
[2,1,5,6,2,3],
return
10.
class Solution { public: //http://www.cnblogs.com/lichen782/p/leetcode_Largest_Rectangle_in_Histogram.html //思想很棒,栈内元素一定是要比当前i指向的元素小 //弹栈过程中面积的计算:h[t] * (stack.isEmpty() ? i : i - 1 - stack.peek() ) //1.h[t]是刚刚弹出的栈顶端元素,它肯定是短板,此时的面积计算是h[t]和前面的i-1开始所能围成的最大面积。 //2.栈内索引指向的元素都是比h[t]小的,如果h[t]是目前最小的,那么栈内就是空哦,则计算所有的。 //3.目前栈顶元素和h[t]之间(不包括h[t]和栈顶元素),都是大于他们两者的 //栈存储的是下标,末尾添加一个0,使元素都出栈 int largestRectangleArea(vector<int>& height) { stack<int> ss; int i=0,maxArea=0; height.push_back(0); int len=height.size(); while(i<len){ if(ss.empty() || height[ss.top()]<=height[i]){ ss.push(i++); }else{ int t=ss.top(); ss.pop(); maxArea=max(maxArea,height[t] * (ss.empty()?i : i-1-ss.top())); } } return maxArea; } };
相关文章推荐
- SQL && NoSQL
- IOS框架和服务
- redis
- 随机数、序列数生成、数组排序
- 不进化,则消亡
- Java学习笔记【输入输入知识要点】
- android工具eclipse如何添加源码
- 字符字节转换器,不同编码下字符字节互转
- 算法--设计一个有getMin功能的栈
- [算法]基于分区最近点算法的二维平面
- 十六进制转化成汉字
- ormapping框架和jdbc的比较
- 时间管理从用好今目标开始
- spring oauth2.0入门(实战)
- sql sever 2008修改数据类型
- C语言高速入口系列(七)
- Struts框架核心工作流程与原理
- GRE
- Android开发 MeasureSpec介绍
- 【TCO 2013 3A】TrichyInequality