直方图最大矩阵面积
2016-04-30 18:45
274 查看
直方图最大矩阵面积法:
给定n个非负整数,表示直方图的方柱的高度,同时,每个方柱的宽度假定都为1,找出直方图中最大的矩形面积。
如:给定高度为:2,1,5,6,2,3,最大面积为10.
![](https://images2015.cnblogs.com/blog/897484/201604/897484-20160430184259566-318903393.png)
程序实现:
运行结果:
![](https://images2015.cnblogs.com/blog/897484/201604/897484-20160430184423675-775300153.png)
转载请注明出处:
C++博客园:godfrey_88
http://www.cnblogs.com/gaobaoru-articles/
给定n个非负整数,表示直方图的方柱的高度,同时,每个方柱的宽度假定都为1,找出直方图中最大的矩形面积。
如:给定高度为:2,1,5,6,2,3,最大面积为10.
![](https://images2015.cnblogs.com/blog/897484/201604/897484-20160430184259566-318903393.png)
程序实现:
#include <iostream> #include <stack> #include <algorithm> #include <cstring> using namespace std; int LargestRectangleArea(vector<int>& height){ height.push_back(0);//为了统计,数组最后添加0,确保原数组的最后一位得到计算 stack<int> s; int LargestArea = 0; int temp,i=0; while(i<(int)height.size()){ if(s.empty()||(height[i]>height[s.top()])){ s.push(i); i++; } else{ temp = s.top(); s.pop(); LargestArea = max(LargestArea,height[temp]*(s.empty()?i:i-s.top()-1)); } } return LargestArea; } int main() { int a[] ={2,1,5,6,2,3}; vector<int> height(a,a+sizeof(a)/sizeof(int)); cout<<LargestRectangleArea(height)<<endl; return 0; }
运行结果:
![](https://images2015.cnblogs.com/blog/897484/201604/897484-20160430184423675-775300153.png)
转载请注明出处:
C++博客园:godfrey_88
http://www.cnblogs.com/gaobaoru-articles/
相关文章推荐
- 【第三次自考】——总结
- operation not allowed after resultset closed错误的解决
- awk 实例练习(二)
- Java循环练习:100~200之间有哪些数是质数?
- poj 2778 DNA Sequence(AC自动机 + 矩阵快速幂)
- awk 实例练习(一)
- linux编译中的常见问题
- Dijkstra 算法
- 使用Messenger实现进程间的相互通信
- 338. Counting Bits
- 残缺的棋盘 数学
- Codeforces Round #349 (Div. 1)
- 如何解决 arm-none-linux-gnueabi-gcc -v和arm-linux-gcc 没有那个文件或目录
- Hadoop RPC基本框架
- BZOJ4379: [POI2015]Modernizacja autostrady
- char、wchar_t、strlen、wcslen
- div的层的覆盖
- App架构设计经验谈:接口的设计
- 山东省第三届ACM大学生程序设计竞赛-Pixel density(模拟)
- C# 文件重命名