直方图内最大矩形

题目描述

有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。

给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。

测试样例:
[2,7,9,4,1],5
返回:14

思路
第i个元素两边的大于第i个元素的个数

 1 class MaxInnerRec {
 2 public:
 3     int countArea(vector<int> A, int n) {
 4         // write code here
 5         vector<int>dp(n,0);
 6         for(int i=0;i<n;i++)
 7         {
 8             int begin=i+1;
 9             while(A[begin]>=A[i]&&begin<=n-1)
10             {
11                 dp[i]+=A[i];
12                 begin++;
13             }
14         }
15         for(int i=n-1;i>=0;i--)
16         {
17             int end=i-1;
18             while(A[end]>=A[i]&&end>=0)
19             {
20                 dp[i]+=A[i];
21                 end--;
22             }
23         }
24         int max=0;
25         for(int i=0;i<n;i++)
26         {
27             dp[i]+=A[i];
28             if(max<dp[i])
29                 max=dp[i];
30         }
31         return max;
32     }
33 };

 

posted @ 2016-09-10 10:28  ranran1203  阅读(325)  评论(0编辑  收藏  举报