单调栈 - wenzhoullq/leetcode GitHub Wiki

模板

    for(int i=0;i<nums.length;i++){
        while(!s.isEmpty()&&nums[s.peek()]比较nums[i]){
              s.pop(); 
              ......
          }
        s.push();
     }

最短

496. 下一个更大元素 I

503. 下一个更大元素 II

739. 每日温度

1019. 链表中的下一个更大节点

1475. 商品折扣后的最终价格

最大宽度/最小宽度(非最短题型)

962. 最大宽度坡

1124. 表现良好的最长时间段

1574. 删除最短的子数组使剩余数组有序

普通单调栈

D. Max GEQ Sum-灵茶-2023.1.16 min/max()模板无法满足前缀和的单调,只能用最传统的模板

901. 股票价格跨度

1944. 队列中可以看到的人数

1996. 游戏中弱角色的数量

2454. 下一个更大元素 IV 再维护一个优先队列

非模板的单调栈

456. 132 模式

min() *(j - i + 1)

 Stack<Integer> st = new Stack<>();
        st.push(-1);
        int ans = 0;
        for(int i = 0 ; i <= heights.length ;i++ ){
            int h = i <heights.length ? heights[i]:-1;
            while(st.size() > 1 && heights[st.peek()] > h){
                int index = st.pop();
                ans = Math.max(ans,heights[index] * (i - st.peek() - 1));
            }
            st.push(i);
        }
        return ans;

字节跳动2018校招-T2

42. 接雨水

84. 柱状图中最大的矩形

85. 最大矩形

1793. 好子数组的最大分数

1856. 子数组最小乘积的最大值

2334. 元素值大于变化阈值的子数组

贡献法

思想类似于min()的单调栈解法,模板类似

907. 子数组的最小值之和

2104. 子数组范围和 最大值就是nums取反后变为最小值

字典序

316. 去除重复字母

402. 移掉 K 位数字

1673. 找出最具竞争力的子序列

6202. 使用机器人打印字典序最小的字符串

⚠️ **GitHub.com Fallback** ⚠️