栈相关经典题:每日温度
生活随笔
收集整理的這篇文章主要介紹了
栈相关经典题:每日温度
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? 題目:
? ? ?根據每日氣溫列表,請重新生成一個列表,對應位置的輸入是你需要再等待多久,溫度才會升高超過該日的天數。如果之后都不會升高,請在該位置用?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位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的栈相关经典题:每日温度的全部內容,希望文章能夠幫你解決所遇到的問題。