跳转至

单调栈

单调栈是一种栈结构,栈内元素保持单调递增或递减。常用于解决“下一个更大/小元素”、“区间最值”等问题。

基本思想

  • 入栈时弹出不满足单调性的元素,保证栈内元素单调。
  • 适合处理一维数组的区间性质问题。

常见应用

  • 下一个更大/小元素
  • 柱状图最大矩形
  • 单调区间最值

代码示例(下一个更小元素)

#include <vector>
#include <stack>
using namespace std;

vector<int> nextSmaller(const vector<int>& nums) {
    int n = nums.size();
    vector<int> res(n, -1);
    stack<int> stk;
    for (int i = 0; i < n; ++i) {
        while (!stk.empty() && nums[stk.top()] > nums[i]) {
            res[stk.top()] = i;
            stk.pop();
        }
        stk.push(i);
    }
    return res;
}

注意事项

  • 单调栈适用于需要快速获取下一个更大/小元素或维护单调性质的问题。
  • 注意边界处理和下标的使用。

发现错误?想一起完善? 在 GitHub 上编辑此页

本文档内容作为个人算法笔记整理,代码模板可按需要参考和修改。