关于leetcode:leetcode-739-Daily-Temperatures-每日温度中等

47次阅读

共计 1077 个字符,预计需要花费 3 分钟才能阅读完成。

一、题目粗心

标签: 栈和队列

https://leetcode.cn/problems/daily-temperatures

给定一个整数数组 temperatures,示意每天的温度,返回一个数组 answer,其中 answer[i] 是指对于第 i 天,下一个更高温度呈现在几天后。如果气温在这之后都不会升高,请在该地位用 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

    二、解题思路

    什么是枯燥栈?枯燥栈通过维持栈内值的枯燥递增(递加)性,在整体 O(n) 的工夫内解决须要大小比拟的问题。

思路:能够维持一个枯燥递加的栈,示意每天的温度,为了不便计算天数差,这里寄存地位(即日期)而非温度自身。从左向右遍历温度数组,对于每个日期 p,如果 p 的温度比栈顶存储地位 q 的温度高,则咱们取出 q,并记录 q 须要期待的天数 p -q;反复这一过程,直到 p 的温度小于等于栈顶地位的温度或空栈时,咱们将 p 插入栈顶,而后思考下一天。在这个过程中栈内数组永远放弃枯燥递加,防止了应用排序进行比拟。最初若栈内残余一些日期,则阐明它们之后都没有呈现更温暖的日期。

三、解题办法

3.1 Java 实现

public class Solution {public int[] dailyTemperatures(int[] temperatures) {int[] ans = new int[temperatures.length];
        Stack<Integer> desStack = new Stack<>();
        for (int i = 0; i < temperatures.length; i++) {while (!desStack.isEmpty()) {int preIndex = desStack.peek();
                if (temperatures[i] <= temperatures[preIndex]) {break;}
                desStack.pop();
                ans[preIndex] = i - preIndex;
            }
            desStack.push(i);
        }
        return ans;
    }
}

四、总结小记

  • 2022/8/10 下雨、下雪本是很好玩的事,大了之后也不尽然,出行、生产、工作都会受到影响

正文完
 0