【Vigor】leetcode刷题 -- 739. 每日温度(java)

题目:

每日温度

题意理解:

  • 依据题意,需要查找到下一个温度更高的日子距当前有多少天
  • 比如有三天温度:73 56 74 ,则距 73 后 74 比其温度更高,而 73 之后需要等待 2 天才到 74 ,所以 73 对应的数组值为 2 .

解题思路:

  • 我们可以遍历一遍所给的温度数组,因为遍历过的元素可能对后面的元素产生影响,所以可以考虑使用 这种数据结构进行解题。

  • 在遍历的过程中,我们存储在栈中的值为该元素的数组下标。

  • 当当前元素比栈顶元素大,则证明找到了至少一个温度升高的“迹象”,则将栈顶元素取出。

  • 当前元素下标 - 取出的栈顶元素值 = 栈顶元素需要等待更高温的天数。

  • 注意点:

  • 使用判断 “!stack.isEmpty()” 当栈中无元素时,直接将元素入栈,另外,当元素和栈顶元素相等时,也需要将该元素进栈,这样做也很好地解决了刚开始栈中无元素,第一个元素的去向

  • 当遍历完所给数组元素时,有可能出现栈中还有元素的情况,当并不影响结果,这些在栈中的元素下标的结果值分别都为 0 ,因为没有下一个比其更高的温度存在。而若我们刚开始通过创建一个 int 类型的数组来存储等待天数,因为基本数据类型的数组值默认为 0 ,所以,我们无需再对最后剩余的栈中元素的结果值进行赋 0 。

  • 下面演示一下过程:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码:

public int[] dailyTemperatures(int[] T) {
    Stack<Integer> stack = new Stack<>();
    int[] res = new int[T.length];

    for(int i = 0; i < T.length; i++){
        while (!stack.isEmpty() && T[i] > T[stack.peek()]){
            Integer Idx = stack.pop();
            res[Idx] = i - Idx;
        }
        //如果栈为空 则添加元素,相等也得push
        stack.push(i);
    }
    return res;
}

执行结果:

执行结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值