2022-6-5 真题练习
描述
给定一个数组heights,长度为n,height[i]是在第i点的高度,那么height[i]表示的直方图,能够形成的最大矩形是多少?
1.每个直方图宽度都为1
2.直方图都是相邻的
3.如果不能形成矩形,返回0即可
4.保证返回的结果不会超过231-1
1 import java.util.*; 2 3 4 public class Solution { 5 /** 6 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 7 * 8 * 9 * @param heights int整型一维数组 10 * @return int整型 11 */ 12 public int largestRectangleArea (int[] heights) { 13 // write code here 14 15 int max=0,n=heights.length; 16 //单调栈 17 for (int i=0;i<n;i++){ 18 int left=i-1,right=i+1; 19 while (left>=0&&heights[left]>=heights[i]) left--; 20 while (right<n&&heights[right]>=heights[i]) right++; 21 max=Math.max(max,(right-left-1)*heights[i]); 22 } 23 return max; 24 } 25 26 27 }
思路:穷举最低的高度,左右寻找可以组合成的最长的矩形。
单调栈做法:加入下标!!! 弹出时更新最大的面积。遍历完之后栈可能不为空,需要更新解。