直方图内最大矩形
题目描述
有一个直方图,用一个整数数组表示,其中每列的宽度为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 };