其他分享
首页 > 其他分享> > 2022-6-5 真题练习

2022-6-5 真题练习

作者:互联网

MT4 直方图内最大矩形

描述

给定一个数组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 }

思路:穷举最低的高度,左右寻找可以组合成的最长的矩形。

单调栈做法:加入下标!!! 弹出时更新最大的面积。遍历完之后栈可能不为空,需要更新解。

标签:right,真题,int,max,练习,heights,直方图,2022,矩形
来源: https://www.cnblogs.com/benbicao/p/16343848.html