遍历每个矩形,并以当前矩形为高,计算此时对应的最大矩形面积——两个指针分别向左右两边移动,遇到第一个比当前矩形高度低的矩形时停止,此时得到当前矩形对应的最大矩形的宽(right-left+1),即可计算得到当前矩形对应的最大矩形面积。
package csp;
import java.util.*;
public class csp_13_12_03 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a = new int[n+2];//扩大数组防止越界
for(int i =1;i<=n;i++) {
a[i] = in.nextInt();
}
in.close();
int maxarea = 0;
for(int i =1;i<=n;i++) {
int t = area(a,i);
if(maxarea<t) maxarea = t;
}
System.out.print(maxarea);
}
public static int area(int[] a,int k) {
int n = a.length;
if(a[k] == 1) return n-2;
int left =k-1;
int right =k+1;
while(left >= 1) {
if(a[left] < a[k]) {
left++;
break;
}else {
left--;
}
}
while(right <= n) {
if(a[right] < a[k]) {
right--;
break;
}else {
right++;
}
}
if(right >n) right=n;
if(left < 1) left =1;
int result = a[k] *(right-left+1);
return result;
}
}