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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章