给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积
简单的单调栈的板子题
import java.util.Scanner;
import java.util.Stack;
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<n;i++){
heights[i] = sc.nextInt();
}
System.out.println(largestRectangleArea(heights));
}
public static int largestRectangleArea(int[] heights) {
int n = heights.length;
int[] nums = new int[n+2];
nums[0] = 0;
nums[nums.length-1] = 0;
for(int i = 1;i < n+1;i++){
nums[i] = heights[i-1];
}
int ans = 0;
Stack<Integer> stack = new Stack<>();
for(int i = 0;i < nums.length;i++){
while(!stack.isEmpty() && nums[i] < nums[stack.peek()]){
int t = stack.pop();
int l = stack.peek();
int kuan = i-l-1;
ans = Math.max(ans,nums[t]*kuan);
}
stack.push(i);
}
return ans;
}
}