力扣第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高度,不能构成矩形breakw = 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_areaprint(largestRectangleArea([2, 1, 5, 6, 2, 3]))
print(largestRectangleArea([2, 4]))