您的位置:首页 > 其它

直方图包含最大矩形

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

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

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

返回:14


这里要考虑的只有:是要高一些的呢?还是要长一些的呢?当然了,我们要的是面积最大的。所以先找到区域里最矮的乘上整个区域长度,然后把这个最矮的矩形左右两边分别进行如上操作,期间一直找寻最大面积~

import java.util.*;

public class MaxInnerRec {
public int countArea(int[] A, int n) {
// write code here
int s = 0;
int e = n - 1;
return Max_Area(A, s, e);
}
public int Max_Area(int[] A, int s, int e) {
if(s==e)
return A[s];
if(s>e)
return 0;
int area = 0, area_t = 0;
int m_index = Find_min(A, s, e);
area = A[m_index] * (e-s+1);
area_t = Max_Area(A, s, m_index-1);
if(area_t>area)
area = area_t;
area_t = Max_Area(A, m_index+1, e);
if(area_t>area)
area = area_t;

return area;
}
public int Find_min(int[] A, int s, int e) {
int min = A[s], res = s, i = s+1;
for(; i<=e; i++) {
if(A[i]<min) {
min = A[i];
res = i;
}
}
return res;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: