# # 又一次经典来袭! LeetCode:84. # # 给定n # 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1 。 # 求在该柱状图中,能够勾勒出来的矩形的最大面积。 # # # # 示例1: # 输入:heights = [2, 1, 5, 6, 2, 3] # 输出:10 # 解释:最大的矩形为图中红色区域,面积为10 # # # 示例2: # 输入: heights = [2, 4] # 输出: 4 #解题思路:单调栈 ,求左边第一个比当前小的和右边第一个比当前小的 heights = [2, 1, 5, 6, 2, 3] def get_area(heights): heights.insert(0, 0) heights.append(0) vstack = [0] res = 0 for i in range(len(heights)): if vstack and heights[i] >= heights[vstack[-1]]: vstack.append(i) else: while vstack and heights[i] <heights[vstack[-1]]: mid = vstack[-1] vstack.pop() right = i left = vstack[-1] area = heights[mid] * (right - left -1) res = max(area,res) vstack.append(i) return res print(get_area(heights))
5.单调栈-柱状图中最大的矩形.py
最新推荐文章于 2024-05-30 20:15:33 发布