Python編程題21--每日溫度


題目

給定一個非空整數列表 temperatures ,該列表依次記錄了每日溫度,請計算在每一天需要等幾天才會有更高的溫度,並將結果通過列表返回。

說明:如果氣溫在這之后都不會升高,請在該位置用 0 來代替。

例如:

給定一個列表:[73, 74, 75, 71, 69, 72, 76, 73],返回結果:[1, 1, 4, 2, 1, 1, 0, 0]

給定一個列表:[30, 25, 35, 32],返回結果:[2, 1, 0, 0]

解釋:

[30, 25, 35, 32] 表示該列表記錄了4日溫度,第 1 日為30,第 2 日為25,第 3 日為35,第 4 日為32 ;

[2, 1, 0, 0] 表示該列表每日需要等幾天才會有更高的溫度,第 1 日需要等 2 天后溫度升高到35,第 2 日需要等 1 天后溫度升高到35,第 3、4 日后溫度都不會升高,所以都是 0

實現思路1

  • 直接暴力破解
  • 第一層遍歷設置當前溫度的位置 i,第二層遍歷設置當前溫度之后的位置 j
  • 每次遍歷時尋找出溫度升高的下一天,然后通過下標計算得出相差的天數 j - i ,並跳出第二層循環

代碼實現

def dailyTemperatures(temperatures):
    res = []
    for i in range(len(temperatures)):
        count = 0
        for j in range(i + 1, len(temperatures)):
            if temperatures[j] > temperatures[i]:
                count += j - i
                res.append(count)
                break
        else:  # for ... else 只有在 for 中全部遍歷完,且for中沒有因 break 提前跳出循環時才執行else
            res.append(0)
    return res

實現思路2

  • 借助 來實現
  • 用列表 res 表示返回的結果,並設置默認值為 [0] * len(temperatures),用列表 stack 表示棧,其用於存儲當前溫度的下標 i
  • 第一層 for 遍歷 temperatures ,每次遍歷都需把當前溫度的下標 i 添加到 stack
  • 第二層用 while 循環 stack ,如果非空並且當前溫度大於棧頂元素對應的溫度,那么執行出棧,直到棧頂元素對應的溫度大於當前溫度
  • 每次 stack 執行出棧時,可以計算得出當前溫度升高所需的天數 i - stack.pop()

代碼實現

def dailyTemperatures(temperatures):
    res = [0] * len(temperatures)
    stack = []
    for i, cur in enumerate(temperatures):
        while stack and cur > temperatures[stack[-1]]: 
            index = stack.pop()
            res[index] = i - index
        stack.append(i)
    return res

更多Python編程題,等你來挑戰:Python編程題匯總(持續更新中……)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM