2022-6-5 真题练习
作者:互联网
MT4 直方图内最大矩形
描述
给定一个数组heights,长度为n,height[i]是在第i点的高度,那么height[i]表示的直方图,能够形成的最大矩形是多少? 1.每个直方图宽度都为1 2.直方图都是相邻的 3.如果不能形成矩形,返回0即可 4.保证返回的结果不会超过231-11 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 }
思路:穷举最低的高度,左右寻找可以组合成的最长的矩形。
单调栈做法:加入下标!!! 弹出时更新最大的面积。遍历完之后栈可能不为空,需要更新解。
标签:right,真题,int,max,练习,heights,直方图,2022,矩形 来源: https://www.cnblogs.com/benbicao/p/16343848.html