直方图最大矩阵面积

直方图最大矩阵面积法:

给定n个非负整数,表示直方图的方柱的高度,同时,每个方柱的宽度假定都为1,找出直方图中最大的矩形面积。

如:给定高度为:2,1,5,6,2,3,最大面积为10.

程序实现:

 1 #include <iostream>
 2 #include <stack>
 3 #include <algorithm>
 4 #include <cstring>
 5 using namespace std;
 6
 7 int LargestRectangleArea(vector<int>& height){
 8     height.push_back(0);//为了统计,数组最后添加0,确保原数组的最后一位得到计算
 9     stack<int> s;
10     int LargestArea = 0;
11     int temp,i=0;
12     while(i<(int)height.size()){
13         if(s.empty()||(height[i]>height[s.top()])){
14             s.push(i);
15             i++;
16         }
17         else{
18             temp = s.top();
19             s.pop();
20             LargestArea = max(LargestArea,height[temp]*(s.empty()?i:i-s.top()-1));
21         }
22     }
23     return LargestArea;
24 }
25 int main()
26 {
27     int a[] ={2,1,5,6,2,3};
28     vector<int> height(a,a+sizeof(a)/sizeof(int));
29     cout<<LargestRectangleArea(height)<<endl;
30     return 0;
31 }

运行结果:

转载请注明出处:

C++博客园:godfrey_88

http://www.cnblogs.com/gaobaoru-articles/

时间: 2024-10-15 10:10:29

直方图最大矩阵面积的相关文章

Codeforces Round #337 (Div. 2) D. Vika and Segments 线段树 矩阵面积并

D. Vika and Segments Vika has an infinite sheet of squared paper. Initially all squares are white. She introduced a two-dimensional coordinate system on this sheet and drew n black horizontal and vertical segments parallel to the coordinate axes. All

【算法】直方图中最大面积问题

问题描述 给定一个直方图,求这个直方图中最大矩阵对应的面积是多少? 比如有个图如下 (对应的数组为:[2,1,5,6,2,3]) 那么对应的最大矩形的面积应该为 10: 问题分析 这类题是很常见的一道题,也是面试当中很容易考到的一题.解决方法倒是挺多.常见的比如Divide-and-conqure等方法,复杂度也都是O(n log n). 现在有没有一种更快的方法呢?复杂度可以达到 O(n) 问题求解 解法1:分治法(divide-and-conqure) 分治法,正如其名,需要对该问题分而治之

java:矩阵面积

实现一个矩阵类Rectangle,包含如下的一些成员变量与函数: 两个共有的成员变量 width 和 height 分别代表宽度和高度. 一个构造函数,接受2个参数 width 和 height 来设定矩阵的宽度和高度. 一个成员函数 getArea,返回这个矩阵的面积. public class Solution { public static void main(String args[]) { Rectangle testArea = new Rectangle(2, 3); testAr

POJ 3695 Rectangles 1w询问求20个矩阵面积并 容斥

题目链接:点击打开链接 一个详细的题解:点击打开链接 题目大意是给出若干个矩形(n <= 20) 然后m个询问(m <= 100000) 每个询问会给出一些矩形的编号,问这些矩形的面积并有多大 谈到矩形并,也许第一反应都是线段树 但是此题有一个特点,就是n非常小,m却非常大 用线段树很有可能会不行 于是换个思路,n很小,我们可以把所有的可能组合情况都考虑到,然后呢预处理出来,这样询问时就是O(1)的查询了 但是1<<20显然是远大于100000的 也就是说我们没必要把所有情况都考虑

蓝桥杯_基础训练_矩阵面积交

基础练习 矩形面积交 时间限制:1.0s   内存限制:512.0MB 问题描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入格式 输入仅包含两行,每行描述一个矩形. 在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示. 输出格式 输出仅包含一个实数,为交的面积,保留到小数后两位. 样例输入 1 1 3 32 2 4 4 样例输出 1.00 题解: 由于不知道输

Java基础 矩阵面积

提供 数据结构与算法题目 的平台是LintCode,参考链接是:http://www.lintcode.com/zh-cn/ 问题描述: 参考代码: public class Rectangle { /* * Define two public attributes width and height of type int. */ // write your code here public int width; public int height; /* * Define a construc

九章算法面试题43 直方图内最大矩阵

九章算法官网-原文网址 http://www.jiuzhang.com/problem/43/ 题目 给出一个直方图(如图所示),求出所给直方图中所包含的最大矩阵面积.直方图可以用一个整数数组表示,如上图为[2, 1, 5, 6, 2, 3].每个直方块的宽度均为1.上图中包含的最大矩阵面积为10. 解答 如果对于每个直方块,找到从它开始往左边数第一个比它小的,和往右边数第一个比他小的,则可以确定出以该直方块为最矮一块的矩阵的最大面积.使用数据结构栈,栈中保存递增序列,从左到右依次遍历每个数让其

寻找直方图中面积最大的矩形

Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different heights. For example, the figure on the left shows the histogram that consists of rectang

一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵

题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下来N行,每行M个数,表示矩阵每个元素的值 输出: 输出最小面积的值.如果出现任意矩阵的和都小于K,直接输出-1. 样例输入: 4 4 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 样例输出: 1 首先这个题应该是有一个动态规划的解法,不过好像复杂度也要到O(n^3lo