739. 每日温度

739. 每日温度:

题目链接 :739. 每日温度

题目:请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。


思路:

1、 遍历法
(1)向后遍历寻找大于当前值的元素
(2)将两个元素的下标之差放入新的结果数组

2、单调栈法
(1)元素压入一个栈中,栈中元素保持栈顶元素最小,栈底元素最大

(2)遍历数组元素,将其与当前栈顶值比较

(3)栈顶值小于当前索引对于数组值,栈顶值出栈,并且记录的间隔数= (当前索引-栈顶值),当前索引值入栈

(4)反之将当前索引值压入栈,保持了栈顶元素始终最小的规律


AC代码:

  1. 遍历法:
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
       
        int len=temperatures.length;
        int[] re = new int[len];
        for(int i=0;i<len;i++)
        {
            int cur=temperatures[i];
            if(cur<100)
            {
                for(int j=i+1;j<len;j++)
                {
                    if(temperatures[j]>cur)
                    {
                        re[i]=j-i;
                        break;
                    }
                }
            }
        } 
        return re;       
    }
}

  1. 单调栈法
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {

        int len=temperatures.length;

        int[] ans=new int[len];
        Deque <Integer> dq=new LinkedList<>();
        for(int i=0;i<len;i++)
        {
            int tmp=temperatures[i];
            while(!dq.isEmpty()&&tmp>temperatures[dq.peek()])
            {
                int preIdx=dq.pop();
                ans[preIdx]=i-preIdx;
            }
            
            dq.push(i);
        }
        return ans;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值