Leetcode之单调栈

单调栈定义:

栈内元素单调按照递增(递减)顺序排列的栈。

单调栈又分为单调递减栈单调递增栈

 

单调递减栈:

①在一个数组中针对每一个元素从它右边寻找第一个比它大的元素 

②在一个数组中针对每一个元素从它左边寻找第一个比它大的元素(从后往前遍历)

Stack<integer> st = new Stack<integer>();
//数组元素放入栈中
for(int num : nums){
    //当数组不为空时,若num值大于栈顶值的时候,弹出栈顶元素,一直到num值不大于当前栈顶值
    if(!st.empty() && st.peek() < num){
        st.pop();
    }
    else{
        st.push(num);
    }
}

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

找出输入数组中,每个元素右边第一个比它大的元素,若没有则为0。
输入:[2,7,4,3,5]
输出:[7,0,5,5,0]
2入栈                                        结果:[2] 
7比2大,2弹出,7入栈                          结果:[7]      第一个比2大的元素为7
4比7小,4入栈                                 结果: [7,4]   
3比4小,3入栈                                 结果: [7,4,3]
5比3大,3弹出;5比4大,4弹出,5比7小,5入栈     结果[7,5]      第一个比3,4大的元素为5

没有比5,7大的元素

 

单调递增栈:

①在一个数组中针对每一个元素从它右边寻找第一个比它小的元素

②在一个数组中针对每一个元素从它左边寻找第一个比它小的元素(从后往前遍历)

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值