Leetcode. Largest Rectangle in Histogram

1. 题解

题目

链接🔗:84. Largest Rectangle in Histogram

BBJz0av

这道题和42. Trapping Rain Water有些相像,但是42题求的是能围住的最大面积,而本题求的是连成的矩阵的最大面积,因而在计算面积的方法上有些许不同。85. Maximal Rectangle就是在本题基础上的变式,通过一系列变化可以使用本题方法。

分析

简单分析可以知道最大矩形面积有两种情况:

  1. 当前矩形的高度heights[i] * 1
  2. 当前矩形的高度heights[i] * (向右第一个比当前高度小的矩形的index - 向左第一个比当前高度小的矩形的index - 1)

经过进一步归纳发现,第一种情况其实包含于第二种情况。

解法一:DP

根据上述描述,如果我们每次遍历到一个index,就可以知道左右需要的index,就可以直接计算最大面积。所以本题应该构建两个数组,来存储每一个index向左第一个较小矩形的index和向右第一个较小矩形的index的数组。

int[] leftLess = new int[heights.length];   // store the left index - i that heights[i] <= heights[current]
int[] rightLess = new int[heights.length];  // same to the leftLess
leftLess[0] = -1;
rightLess[heights.length - 1] = heights.length;
// leftLess
for (int i = 1; i < heights.length; 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值