链接:https://www.nowcoder.com/questionTerminal/b0fbb688d01a4f2c8c17e5efd85d5824
来源:牛客网
给定一组非负整数组成的数组h,代表一组柱状图的高度,其中每个柱子的宽度都为1。 在这组柱状图中找到能组成的最大矩形的面积(如图所示)。 入参h为一个整型数组,代表每个柱子的高度,返回面积的值。
输入描述:
输入包括两行,第一行包含一个整数n(1 ≤ n ≤ 10000)
第二行包括n个整数,表示h数组中的每个值,h_i(1 ≤ h_i ≤ 1,000,000)
输出描述:
输出一个整数,表示最大的矩阵面积。
示例1
输入
6
2 1 5 6 2 3
输出
10
解题思路:
遍历数组每一个值,然后用两个指针left与right从当前位置向两边寻找左右边界,这样最后得到以当前值为最小高度的矩形宽度,然后计算面积并与最大值比较并保存其中最大的值
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int num = sc.nextInt();
int[] nums = new int[num];
for(int i=0; i<nums.length; i++)
nums[i] = sc.nextInt();
int maxArea = 0;
for(int i=0; i<nums.length; i++){
int height = nums[i];
int left = i;
while(left >= 0 && nums[left] >= height)
left--;
int right = i;
while(right < nums.length && nums[right] >= height)
right++;
int area = height * (right - left - 1);
maxArea = Math.max(maxArea, area);
}
System.out.print(maxArea);
}
}
}