13-12-03( 最大的矩形)

遍历每个矩形,并以当前矩形为高,计算此时对应的最大矩形面积——两个指针分别向左右两边移动,遇到第一个比当前矩形高度低的矩形时停止,此时得到当前矩形对应的最大矩形的宽(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;
	
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值