【队列 &栈】Leecode-84. 柱状图中最大的矩形
【摘要】 【题目】给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1:输入:heights = [2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为 10示例 2:输入: heights = [2,4]输出: 4【题解】题解1:思路 单调栈复杂度 时间复杂度...
【题目】
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例 1:
输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10
示例 2:
输入: heights = [2,4]
输出: 4
【题解】
题解1:
- 思路
单调栈:遍历数组,依次入栈,当不满足单调递增时将栈顶元素弹出,面积为index-栈顶元素位置乘以该元素值
- 复杂度
时间复杂度:O(n2),空间复杂度:O(n)
- 代码
class Solution:
def largestRectangleArea(self, heights: List[int]) -> int:
heights = [0] + heights + [0]
stack = []
res = 0
for index, value in enumerate(heights):
while stack and heights[index] < heights[stack[-1]]:
cur = stack.pop()
width = index - stack[-1] -1
res = max(res, heights[cur]*width)
stack.append(index)
return res
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)