力扣第84题-柱状图中最大的矩形

力扣链接:84. 柱状图中最大的矩形 - 力扣(LeetCode)

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10

输入: heights = [2,4]
输出: 4
"""
思路:
此题和接雨水类似,我们可以遍历每一个元素,然后用一个指针P移动计算面积,计算面积之后,
更新max的值,当遇到指针的位置为0的元素直接跳过,因为不可能构成矩形
"""


def largestRectangleArea(heights):
    max_area = 0  # 记录最大值

    for i in range(len(heights)):  # 循环遍历每一个索引位置

        p = i  # 初始p为当前的i的位置
        while p < len(heights):  # p到达数组末尾,结束循环
            if heights[p] == 0:  # 当p位置的值是0的时候,直接跳出循环,因为0高度,不能构成矩形
                break
            w = p - i + 1  # 计算当前p位置到i位置的宽度

            cur_value = w * min(heights[i:p + 1])  # 高取当前i和p位置数组中的最小的值,矩形面积是有最矮的构成的来决定的

            max_area = max(max_area, cur_value)  # 更新最大面积的值
            p = p + 1  # 指针右移动
    return max_area


print(largestRectangleArea([2, 1, 5, 6, 2, 3]))
print(largestRectangleArea([2, 4]))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值