找到最大的矩形,这个矩形的决定因素是最低的高,主要的思路就是将每一个数组元素作为高,得到以这个数组元素作为高的最大面积,然后找到面积的最大值。
问题来了,如何找到以这个元素为高的最大面积呢?就以问题描述中的6为例,我们要找到5左右两边离5最近的比5小的位置,左边就是1,右边就是2,然后以5为高的面积最大值就是(2的下标-1的下标-1)*5。
然后问题又来了,为什么是要找两边离5最近的比5小的值呢?因为由这两个小的值确定的矩形里面的高要么是等于5要么是大于5,所以这个区间内部就是以5为高的最大的面积。
import java.util.ArrayList; import java.util.Map; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int[] heights=new int[n]; for(int i=0;i=0并且left指向的高大于等于选定的这个高,左指针就左移 int left = i - 1; while(left >= 0 && heights[left] >= heights[i]){ left--; } //找到右边第一个小于高的位置下标 //如果right小于数组长度 //并且right指向的高大于等于选定的高,右指针就右移 int right = i + 1; while(right < heights.length && heights[right] >= heights[i]){ right++; } //更新面积的最大值 maxArea = Math.max(maxArea, (right - left - 1) * heights[i]); } System.out.println(maxArea); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)