My One hundred and Second Page - 每日温度 - By Nicolas

这篇page是针对leetcode上的739.每日温度所写的。小尼先简单的说明一下这道题的意思,就是给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer表示的四对于第i天,下一个更高温度是出现在几天后,这里填入的就是对应的多少天的数据。

从这一道题开始我们就进入了单调栈的相关题目的描述。小尼接下来就说明一下这道题单调栈的对应的使用方法,就是我们设定一个对应的栈,我们遍历的顺序就是从栈头往栈尾去进行对应的遍历,我们在比较的过程中我们一共会遇到三种情况,分别对应的是对应的第二个数组中对应的数据中小于栈顶的元素、第二个数组中对应的数据等于栈顶的元素、第二个数组中对应的数据大于栈顶的元素,我们只要是将这三种情况分清楚了,我们对对应的解题就比较简单了,小尼先拉一下这道题对应的解题的代码:

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int len = temperatures.length;
        int[] res = new int[len];

        Deque<Integer> stack = new LinkedList<>();
        stack.push(0);
        for(int i = 1 ; i < len; i++){
            if(temperatures[i] <= temperatures[stack.peek()]){
                stack.push(i);
            }else{
                while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]){
                    res[stack.peek()]=i-stack.peek();
                    stack.pop();
                }
                stack.push(i);
            }
        }
        return res;
    }
}

小尼对这段代码做一个分析,首先就是我们对应的设定了一个记录我们对应天数的数组,然后就是我们初始化了一个简单的栈,然后我们先往我们的栈里面先放入一个数据0,然后我们再开始执行对应的for循环进行对应的遍历,我们的for循环中i对应抽取出来的数据是后一天对应的数据,这里就开始了小尼上述所说的三种比较的情况了,首先结果比较简单的判断就是我们抽取出来的元素小于我们对应的栈顶元素,我们这个时候就对我们的栈进行一个数据的加入,这个操作的作用在后续就会体现出来,接下来就是第二种情况,小尼在这里细说一下,对应的就是我们抽取出来的元素大于我们对应的栈顶的元素时,小尼觉得这里做的最好的一个操作就是这里给出的while操作,这个while操作也就使得我们上一步的操作中我们的push操作加入的数据有了它的用处,接下来,小尼说明一下这里面进行的对应的操作,我们在这里进行的对应的操作就是我们做了这一步操作,这一步操作:res[stack.peek()]=i-stack.peek(),我们在res中存入的值对应就是我们取出的i-stack.peek()的操作,这个操作可以完美的记录我们如果连续很多天都没有对应的一个超过前面对应天数的温度时,我们这里的i值在不断地增加,我们对应的stack中的数据正在不断的的pop,最后我们通过这一个差值,就完美的展现出了我们对应的天数的值。这一步的操作也是小尼觉得在这道题中最好的一个地方。

希望上面的分析和代码可以帮助到小伙伴们~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值