• 代码随想录算法训练营19期第60天


    84.柱状图中最大的矩形

    代码随想录

    初步思路:接雨水

    总结:

    • 接雨水那道题是找每个柱子左右两边第一个大于该柱子高度的柱子,所以单调栈从栈头(元素从栈头弹出)到栈底的顺序应该是从小到大的顺序
    • 本题是找每个柱子左右两边第一个小于该柱子的柱,所以单调栈从栈头(元素从栈头弹出)到栈底的顺序应该是从大到小的顺序
    • 输入数组首尾各补上一个0(与接雨水不同的是,本题原首尾的两个柱子可以作为核心柱进行最大面积尝试)

       

    1. def largestRectangleArea(self, heights: List[int]) -> int:
    2.         '''
    3.         找每个柱子左右侧的第一个高度值小于该柱子的柱子
    4.         单调栈:栈顶到栈底:从大到小(每插入一个新的小数值时,都要弹出先前的大数值)
    5.         栈顶,栈顶的下一个元素,即将入栈的元素:这三个元素组成了最大面积的高度和宽度
    6.         情况一:当前遍历的元素heights[i]大于栈顶元素的情况
    7.         情况二:当前遍历的元素heights[i]等于栈顶元素的情况
    8.         情况三:当前遍历的元素heights[i]小于栈顶元素的情况
    9.         '''
    10.         heights.insert(0, 0)
    11.         heights.append(0)
    12.         stack = [0]
    13.         result = 0
    14.         for i in range(1, len(heights)):
    15.             # 情况一
    16.             if heights[i] > heights[stack[-1]]:
    17.                 stack.append(i)
    18.             # 情况二
    19.             elif heights[i] == heights[stack[-1]]:
    20.                 stack.pop()
    21.                 stack.append(i)
    22.             # 情况三
    23.             else:
    24.                 # 抛出所有较高的柱子
    25.                 while stack and heights[i] < heights[stack[-1]]:
    26.                     # 栈顶就是中间的柱子,主心骨
    27.                     mid_index = stack[-1]
    28.                     stack.pop()
    29.                     if stack:
    30.                         left_index = stack[-1]
    31.                         right_index = i
    32.                         width = right_index - left_index - 1
    33.                         height = heights[mid_index]
    34.                         result = max(result, width * height)
    35.                 stack.append(i)
    36.         return result

    用时:60分钟

  • 相关阅读:
    学习笔记 | 音视频 | 推流项目框架及细节
    JWT的登录认证与自校验原理分析
    7-2 摘花生
    ETLCloud制造业轻量级数据中台解决方案
    2017 黑马 C++ 教学视频
    Endgame P.O.O
    自阿里 P8 爆出 1031 道 java 面试题后,我在 某直聘狂拿千份 Offer
    字节跳动八进八出,offer到手,发现项目不重要算法才最重要
    数据库调优:Mysql索引对group by 排序的影响
    【DesignMode】装饰者模式(Decorator pattern)
  • 原文地址:https://blog.csdn.net/u013003382/article/details/133191094