直方图内最大矩阵
2017-10-25 13:54
190 查看
直方图内最大矩阵
题目描述
有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。
测试样例:
[2,7,9,4,1],5
返回:14
知道怎么枚举,dp也出来了
牛客网题解:
求直方图矩形面积的最大值就是求数组中相邻元素(单个元素,两两相邻,三三相邻。。。
)中最小值乘以他们的数量得到面积,再取最大值,通过分析可以发现实际第一个元素比较一次,第二个元素比较两次,第三个元素比较三次。。。以此类推就可,对于A
只需记录A[n-1]之前最大面积的即可,所以不需要设置额外的数组,只需设置两个int变量即可求出面积最大值。
1 import java.util.*; 2 3 public class MaxInnerRec { 4 public int countArea(int[] A, int n) { 5 int maxArea=0; 6 int min; 7 for(int i=0;i<n;i++){ 8 min=Integer.MAX_VALUE; 9 for(int j=i;j>=0;j--){ 10 min=Math.min(min, A[j]); 11 maxArea=Math.max(maxArea,(i-j+1)*min); 12 } 13 } 14 return maxArea; 15 } 16 }
3 4 int i,j,L1,L2; 5 int max=0; 6 for(i=0;i<n;i++) 7 { 8 L1=0;L2=0; 9 for(j=i;j<n;j++) 10 { 11 if(A[j]>=A[i])L1++; 12 else break; 13 14 } 15 for(j=i-1;j>=0;--j) 16 { 17 if(A[j]>=A[i])L2++; 18 else break; 19 } 20 area=(L1+L2)*A[i]; 21 if(area>max)max=area; 22 } 23 //printf("max area:%d\n",max); 24 return max;
相关文章推荐
- leetcode 85. Maximal Rectangle 最大子矩阵 + DP + 转换为最大直方图
- 直方图下的矩阵最大面积问题
- 九章算法面试题43 直方图内最大矩阵
- 算法题:直方图和0-1矩阵中最大矩形
- 84.直方图中最大矩阵
- 【矩阵二维或三维dp】最大子矩阵,子矩阵快速求和(用到最大直方图)
- 算法面试题——直方图内最大矩阵
- leetcode直方图的最大矩阵算法
- 单调栈——(直方图内最大矩形 || 最大全1子矩阵 )
- 直方图最大矩阵面积
- nyoj 104 最大和(子矩阵最大和)(枚举)
- HDU 1505 City Game (单调栈+最大子矩阵面积)
- 【dp基础课程】矩阵取数问题+最大子段和+最长公共子序列(LCS)【51nod】
- 动态规划——寻找子矩阵最大和
- POJ 1964&HDU 1505&HOJ 1644 City Game(最大0,1子矩阵和总结)
- 直方图包含最大矩形
- 动态规划最大子矩阵
- BZOJ1084 最大子矩阵 [DP]
- 用c语言求取一个矩阵的最大值及其下标
- BZOJ 1059-矩阵游戏(二分图最大匹配)