单调栈

单调栈

单调为单调递增 / 单调递减,通过栈的方式找到单调增的顺序 / 单调减的顺序。

规则:
新元素入栈时,弹出破坏栈内单调性的栈顶元素。
出栈时触发计算(计算目标值)

Example:

  • 接雨水
  • 柱状图中的最大矩形
  • 最高温度
  • 下一个更大元素 I

模版:

    // 单调栈模板:计算 nums 中每个元素的下一个更小或相等的元素
    int[] nextLessOrEqualElement(int[] nums) {
        int n = nums.length;
        // 存放答案的数组
        int[] res = new int[n];
        Stack<Integer> s = new Stack<>();
        // 倒着往栈里放
        for (int i = n - 1; i >= 0; i--) {
            // 删掉 nums[i] 后面较大的元素
            while (!s.isEmpty() && s.peek() > nums[i]) {
                s.pop();
            }
            // 现在栈顶就是 nums[i] 身后的更小或相等元素
            res[i] = s.isEmpty() ? -1 : s.peek();
            s.push(nums[i]);
        }
        return res;
    }
posted @ 2026-01-03 11:15  StichGK  阅读(3)  评论(0)    收藏  举报