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 }

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

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

posted on 2022-06-05 13:40  阿ming  阅读(28)  评论(0编辑  收藏  举报

导航