每日温度题解

每日温度的两种解法

题目描述

给定一个数组T代表了未来几天里每天的温度值,要求返回一个新的数组D,D中的每个元素表示需要经过多少天才能等来温度的升高。给定T:[23,25,21,19,22,26,23]返回 D: [ 1, 4, 2, 1, 1, 0, 0]

暴力解法
var dailyTemperatures = function(T) {
    let result=[];
 const length=T.length;
 T.forEach((element,index) => {
     if(index===length-1){
         result.push(0)
     }
     for(let i=index+1;i<length;i++){
         if(element<T[i]){
             result.push(i-index);
             break;
         }
         if(i===length-1){
             result.push(0)
         }
     }
 });
return result;
};

暴力解法先循环整个给到的温度数组,每一个温度下标作为返回结果的下表,在每一个温度里面循环当前下标之后的元素,找到比当前温度大的值,把结果推送进结果数组,循环到最后的话。则等不来温度的升高。温度的最后一个元素是没有升高 可能性的。直接推0。

利用栈的解法

栈的特点是先进后出,所有的操作都必须在栈顶完成。

const dailyTemperatures = (T) => {
    let tack = [];// 定义栈
    let result=[];  // 定义返回结果                                 

    T.forEach((element, index) => {// 循环整个温度数
        result[index]=0;// 结果数据中初始化为0
        // tack[tack.length - 1] 栈顶存储每一天的温度下标
        while(tack.length>0 && element>T[tack[tack.length - 1]]){
                result[tack[tack.length - 1]] = index - tack[tack.length - 1];
                tack.pop();
        }
        tack.push(index);// 依次将每个元素的下标进行入栈操作。
    });
    return result;
};

循环温度数组,我们会把每个元素入栈一次,在栈里的数据是最后结果的每个元素的下标,通过温度数组加栈顶的下标读取出来的值就是那一天的温度,和循环中当前的元素进行比较如果当前元素大于 栈顶的值,那么当前栈顶下标位置的升高天数就是当前循环温度下标减去栈顶下标,匹配到了。就将当前栈顶元素出栈,

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值