力扣打卡之单调栈问题

我将练习下面的单调栈问题

1. 每日温度【8.12】

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

基本思想

代码展示

有了上面的基本的描述,我们就可以有了基本的思路了

①我们需要创建一个栈来帮助我们进行操作

②我们需要一个数组来存放我们的结果

③我们需要弄清楚我们的题目的核心在于:只要后面的元素大于前面的,我们就可以立刻找到它对应的所要求得的解!

while(!stack.isEmpty && temperature[i]>tempareture[stack.peek()])

 最后的代码如下所示:

class Solution{
    public int[] dailyTemperatures(int[] temperatures) {
        int len=temperatures.length;
        Stack<Integer> stack = new Stack<>();
        int [] answer=new int[len];
        //需要把栈为空放在前面,才不会导致后面出现找不到元素的可能!
        for(int i=0;i<len;i++){
          while(!stack.isEmpty()&&temperatures[i]>temperatures[stack.peek()] ){
                //满足条件的时候在对应的位置上放上对应的值
                answer[stack.peek()]=i-stack.peek();
                stack.pop();
            }
            stack.push(i);      
        }
    return answer;
    }
}

总结

①记住单调栈是怎么使用的,下次如果遇到相反的情况又是否会使用?

②针对上一点,我来进行一个简单的概括

③最后我们需要记住,如果我们需要对栈是不是为空进行判断同时后面的表达式也和栈有关系,栈为空的表达式一定要放在最前面,免得后面出现栈指向异常! 

2. 接雨水【8.13】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值