力扣小白刷题之739题每日温度

题目描述

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

题目理解

数组中元素与下一个比它大的元素之间的距离

思路

参考自:https://leetcode-cn.com/problems/daily-temperatures/solution/leetcode-tu-jie-739mei-ri-wen-du-by-misterbooo/

遍历整个数组,如果栈不空,且当前数字的气温大于栈顶元素的数字的气温时,就需要取出栈顶元素;
由于当前数字的气温大于栈顶元素的数字的气温,那么一定是第一个大于栈顶元素的数字的气温,那么直接求出下标差(栈顶元素与当前数字的差),就是两者之间的距离天数。
继续看栈顶元素,直到当前数字的气温小于等于栈顶元素的数字的气温时,将当前数字入栈,这样就一直可以保证每一个数字和第一个大于它的数的距离可以算出来。
注意: 最后一个数据对应的结果肯定为 0 不需要计算(数组默认值即是 0)
复杂度分析:

  • 该方法只需要对数组进行一次遍历,每个元素最多被压入和弹出堆栈一次,所以算法复杂度为O(N)。

代码

力扣小白刷题之739题每日温度