网站建设与制作教程北华大学,云虚拟主机搭建网站,江苏建设工程信息网准考证打印时间,seo网页的基础知识LeetCode-739. 每日温度【栈 数组 单调栈】 题目描述#xff1a;解题思路一#xff1a;单调栈#xff0c;顺序遍历数组维护单调递减栈#xff0c;在出栈的时候得出答案。可以参考[LeetCode-503. 下一个更大元素 II【栈 数组 单调栈】](https://blog.csdn.net/qq_45934285/a… LeetCode-739. 每日温度【栈 数组 单调栈】 题目描述解题思路一单调栈顺序遍历数组维护单调递减栈在出栈的时候得出答案。可以参考[LeetCode-503. 下一个更大元素 II【栈 数组 单调栈】](https://blog.csdn.net/qq_45934285/article/details/134950524?spm1001.2014.3001.5501)解题思路二暴力从后往前遍历并且维护一个数组nxt其记录每个温度出现的最小下标。这样每遍历一个数就可以直接得出答案。解题思路三0 题目描述
给定一个整数数组 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
解题思路一单调栈顺序遍历数组维护单调递减栈在出栈的时候得出答案。可以参考LeetCode-503. 下一个更大元素 II【栈 数组 单调栈】
class Solution:def dailyTemperatures(self, temperatures: List[int]) - List[int]:n len(temperatures)stack []ans [0] * nfor i in range(n):while stack and temperatures[i] temperatures[stack[-1]]:ans[stack[-1]] i - stack[-1]stack.pop()# if not stack: ans[i] 0 stack.append(i)return ans时间复杂度O(n) 一次遍历 空间复杂度O(n) 单调栈
解题思路二暴力从后往前遍历并且维护一个数组nxt其记录每个温度出现的最小下标。这样每遍历一个数就可以直接得出答案。
class Solution:def dailyTemperatures(self, temperatures: List[int]) - List[int]:n len(temperatures)ans, nxt, big [0] * n, dict(), 10**9for i in range(n - 1, -1, -1):warmer_index min(nxt.get(t, big) for t in range(temperatures[i] 1, 102))if warmer_index ! big:ans[i] warmer_index - inxt[temperatures[i]] ireturn ans时间复杂度O(nm)其中 n 是温度列表的长度m 是数组 next 的长度在本题中温度不超过 100所以m 的值为 100。反向遍历温度列表一遍对于温度列表中的每个值都要遍历数组 next 一遍。
空间复杂度O(m)其中 m 是数组 next 的长度。除了返回值以外需要维护长度为 m 的数组 next 记录每个温度第一次出现的下标位置。
解题思路三0