维护一个单调递增或递减的栈,常用于寻找下一个更大/更小元素

什么是单调栈

单调栈是一种特殊的栈,栈中元素始终保持单调递增或递减。当新元素破坏单调性时,弹出栈顶元素直到恢复单调性。

🎯 为什么使用?

将 O(n²) 的暴力查找优化到 O(n)。当需要找到每个元素的「下一个更大/更小元素」或者处理「柱状图」类问题时,单调栈是最优解法。

⚙️ 如何工作?

1. 遍历数组,尝试将当前元素入栈 2. 如果当前元素破坏单调性,弹出栈顶 3. 被弹出元素的「下一个更大」就是当前元素 4. 当前元素入栈,继续遍历

🎨 形象比喻

想象一排身高不同的人站成一列,每个人向右看,能看到的第一个比自己高的人就是「下一个更大」。单调栈就是模拟这个过程。

🔍 识别关键词

当你在题目中看到以下关键词时,考虑使用单调栈

下一个更大下一个更小前一个更大温度股票

📊 时间空间复杂度

时间复杂度
O(n)
空间复杂度
O(n)

每个元素最多入栈出栈一次

?查看快捷键