重练算法(代码随想录版) day49 - 单调栈part2

今日刷题量:2
当前刷题总量:173
Easy: 63
Mid: 98
Hard: 12

Day49
解题思想
42. 接雨水 核心思想:每一格水量 = min(左边最高, 右边最高) - 当前高度

  • 栈:单调递减
  • 每次 pop 出的是:“凹槽底部”
  • 关键计算公式
    • int h = min(height[i], height[st.top()]) - height[mid];
    • int w = i - st.top() - 1;
    • res += h * w;
  • 本质:算“凹槽”能装多少水

84. 柱状图中最大的矩形 核心思想:以某一根柱子为“最低高度”,向左右扩展

  • 单调递增栈
  • 当前高度 < 栈顶 → 栈顶结算面积
  • 结算公式
    • int h = heights[mid];
    • int w = st.empty() ? i : i - st.top() - 1;
    • area = h * w;
  • 技巧:在末尾补一个 0,强制清栈

练习题目
42. 接雨水(hard):https://leetcode.cn/problems/trapping-rain-water/
84.柱状图中最大的矩形(hard):https://leetcode.cn/problems/largest-rectangle-in-histogram/

posted @ 2025-12-23 05:34  GengarF  阅读(2)  评论(0)    收藏  举报