问题描述:
有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。
给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内
输入:
5
2 7 9 4 1
输出:
14
思路:对于矩形a[i],向左找高度不小于a[i]的矩形,矩形宽度w+1;,直至遇到高度比其小的矩形,向右也是如此。
import java.util.Scanner;
//直方图内最大矩形
public class MaxArea {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int[] a=new int[n];
for (int i = 0; i < a.length; i++) {
a[i]=scanner.nextInt();
}
int max=0;
for (int i = 0; i < a.length; i++) {
int result=0,w=1;//设为1代表矩形自身
for (int j = i-1; j >= 0; j--) {
if (a[i]>a[j]) break;
else {
w++;
}
}
for (int j = i+1; j < a.length; j++) {
if (a[i]>a[j]) break;
else {
w++;
}
}
result = a[i] * w;
if (result > max) {
max = result;
}
}
System.out.println(max);
}
}