[模板总结] - 单调栈

模板题&链接

Leetcode 907. Sum of Subarray Minimums

Leetcode 901. Online Stock Span

Leetcode 496. Next Greater Element

Leetcode 503. Next Greater Element II

Leetcode 739. Daily Temperatures

Leetcode 239. Sliding Window Maximum

单调栈定义

是指一个栈内保存的元素满足单调递增或者递减的关系

单调栈基本问询功能

  • 求当前元素前一个大于或者小于他的值位置
  • 求当前元素下一个大于或者小于他的值位置

模板代码如下:

int n = arr.length;
 
int[] nextSmall = new int[n];
Arrays.fill(nextSmall, n); // 如果没有下一个更小值那么默认值arr.length
Stack<Integer> stk = new Stack<>();
stk.push(0); // 将第一个元素位置压入栈
 
for(int i=1; i<arr.length; i++) {
    while(!stk.isEmpty() && arr[i]<arr[stk.peek()]) {
        // 如果出现小于栈顶元素,stack pop
        int idx = stk.pop();
        nextSmall[idx] = i;
    }
    stk.push(i);
}

时间复杂度:O(N);空间复杂度:O(N)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值