欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

栈相关经典题:每日温度

发布时间:2025/6/15 编程问答 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 栈相关经典题:每日温度 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

      题目:

     根据每日气温列表,请重新生成一个列表,对应位置的输入是你需要再等待多久,温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。

     例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

     提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。

 

思路:利用单调栈解题

//单调栈 func dailyTemperatures(T []int) []int {length := len(T)ans := make([]int, length)//栈stack := []int{}for i := 0; i < length; i++ {//当前温度temperature := T[i]for len(stack) > 0 && temperature > T[stack[len(stack)-1]] {// prevIndex 是栈顶下标prevIndex := stack[len(stack)-1]// stack[:len(stack)-1] 不包括len(stack)-1对应的元素//弹栈 stack = stack[:len(stack)-1]//下标赋值ans[prevIndex] = i - prevIndex}//入栈stack = append(stack, i)}return ans }

每次新元素进栈,需要和栈顶元素进行比较。如果新元素大于栈顶元素,则弹栈,计算出下标。再将新元素和弹栈后的栈顶元素进行比较重复前面操作.如果新元素小于栈顶元素,将新元素入栈。如果小于则直接入栈。

这样,栈里面的元素是单调的,栈底元素最大。

元素在入栈的时候,需要保存元素在原数组里对应的下标和值。

时间复杂度:O(n)

空间复杂度:O(n)

 

参考地址:https://leetcode-cn.com/problems/daily-temperatures/solution/mei-ri-wen-du-by-leetcode-solution/

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的栈相关经典题:每日温度的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。