编程算法面试题

单调栈:下一个更大元素等变形

什么是单调栈?"下一个更大元素"怎么解?

为什么面试官会问这道题

单调栈把一类O(n²)问题降到O(n)——识别模式是面试分水岭。

如何回答

  1. 1

    定义:栈里元素单调递增或递减。压入前弹出破坏单调的元素。

  2. 2

    下一个更大:遍历nums;stack.top<=nums[i]时弹出并记nums[i]为其答案。压入nums[i]。遍历完栈里剩的无下一个更大。

  3. 3

    直方图最大矩形:对每根柱子找左右第一个比它低的。单调递增栈一次扫描。

  4. 4

    模式:"对每个元素找左/右最近更大/更小"→单调栈。

  5. 5

    均摊O(n)因为每个元素进出栈各一次。

参考回答示例

单调栈就是压入前弹掉破坏单调的元素。"下一个更大":遍历数组,stack.top<=当前就弹出——当前就是它的答案。压入当前。结尾栈里剩的没下一个更大。整体O(n)因为每个下标恰好进出一次——经典均摊。模式识别:问题只要是"每个i左边/右边最近满足P的j"就试单调栈。"每日温度"、"直方图最大矩形"、"接雨水"、"移除k位让结果最小"都是同一形状。

实用技巧

  • 要位置/距离就在栈里存下标不存值。

  • "前一个更小"换方向;"下一个更小"换比较符。

  • 即答侠给了模板+6种变形——见过一次形状,后面全是1:1。

常见问题

和单调队列一样吗?

相关但不同。单调队列(deque)支持从另一端删——滑动窗口最大值用它。

什么场景用不了单调栈?

问题不是"最近满足P"时——比如"第k大"要堆不是单调栈。

面试时担心忘词?即答侠实时助你

即答侠 AI 实时监听面试对话,自动识别问题并即时生成回答建议——无感辅助,让你从容应对每一道题。

免费试用即答侠