维护一个单调递增或递减的栈,常用于寻找下一个更大/更小元素
❓ 什么是单调栈?
单调栈是一种特殊的栈,栈中元素始终保持单调递增或递减。当新元素破坏单调性时,弹出栈顶元素直到恢复单调性。
🎯 为什么使用?
将 O(n²) 的暴力查找优化到 O(n)。当需要找到每个元素的「下一个更大/更小元素」或者处理「柱状图」类问题时,单调栈是最优解法。
⚙️ 如何工作?
1. 遍历数组,尝试将当前元素入栈
2. 如果当前元素破坏单调性,弹出栈顶
3. 被弹出元素的「下一个更大」就是当前元素
4. 当前元素入栈,继续遍历
🎨 形象比喻
「想象一排身高不同的人站成一列,每个人向右看,能看到的第一个比自己高的人就是「下一个更大」。单调栈就是模拟这个过程。」
🔍 识别关键词
当你在题目中看到以下关键词时,考虑使用单调栈:
下一个更大下一个更小前一个更大温度股票
📊 时间空间复杂度
时间复杂度
O(n)
空间复杂度
O(n)
每个元素最多入栈出栈一次
按?查看快捷键