剑指Offer|LCR 038.每日温度

LCR 038.每日温度

请根据每日 气温 列表 temperatures ,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。

示例 1:

输入:temperatures = [73,74,75,71,69,72,76,73]
输出:[1,1,4,2,1,1,0,0]

示例 2:

输入:temperatures = [30,40,50,60]
输出:[1,1,1,0]

示例 3:

输入:temperatures = [30,60,90]
输出:[1,1,0]

提示:

  • 1 <= temperatures.length <= 105
  • 30 <= temperatures[i] <= 100

法1:暴力

分析:

最后一个元素的结果一定是0,因为他后面没有元素,所以i的遍历范围可以写为i < temperatures.length - 1,所以结果数组填充0.

两层循环,第一个遍历元素,第二个循环找比当前元素大的数的下标j,如果找到了,就令result[i] = j - i,如果没找到,就设置为0.

时间复杂度 O ( n 2 ) O(n^2) O(n2)

空间复杂度 O ( n ) O(n) O(n)

 var dailyTemperatures = function(temperatures) {
    let result = new Array(temperatures.length).fill(0);
    for (let i = 0; i < temperatures.length - 1; i++) {
        const t = temperatures[i];
        let j = i + 1;
        let flag = true;
        while(j < temperatures.length){
            if(t < temperatures[j]) break;
            else if(j === temperatures.length - 1 && t >= temperatures[j]) flag = false;
            j++;
        }
        result[i] = flag ? j - i : 0;
    }
    return result;
};

法2:栈

分析:

定义一个stack,遍历temperatures,默认直接入栈,如果找到大于栈顶下标的值的数,就将起始的i下标出栈,并将结果存一下result[pre] = i - pre

时间复杂度 O ( n ) O(n) O(n)

空间复杂度 O ( n ) O(n) O(n)

 var dailyTemperatures = function(temperatures) {
    let result = new Array(temperatures.length).fill(0);
    let stack = [];

    for (let i = 0; i < temperatures.length; i++) {
        const t = temperatures[i];
        const top = stack.length - 1;
        while(stack.length > 0 && t > temperatures[stack[top]]){
            // 找到大于i下标元素的值,就将上一个数的下标出栈
            let pre = stack.pop();
            result[pre] = i - pre;
        }
        stack.push(i); // 下标入栈
    }
    return result;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿月浑子の

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值