739 每日溫度

2021-09-12 07:13:20 字數 1117 閱讀 1560

題目描述:

根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高的天數。如果之後都不會公升高,請輸入 0 來代替。

例如,給定乙個列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的輸出應該是 [1, 1, 4, 2, 1, 1, 0, 0]。

氣溫 列表長度的範圍是 [1, 30000]。每個氣溫的值的都是 [30, 100] 範圍內的整數。

解題思路:

首先最容易想到的是,用雙迴圈來做。遍歷整個陣列,找到第乙個比當前元素大的元素,記錄下元素之間的length。

**實現:

public static int dailytemperatures(int t) 

continue;

}} return result;

}

執行結果:

用時410ms,只擊敗了21%的使用者。而且這道題是中等難度,顯然此解法並非迎合出題人的用意所在。還有沒有更好的辦法呢?

考慮到可以利用棧的性質來做。此方法只遍歷一次陣列即可完成。主要思路就是:用乙個棧來記錄陣列元素的下標。為什麼記錄下標呢?因為題目中要求的天數即為陣列元素下標的差值,並且有了陣列下標,也非常方便可以取到陣列元素中的值。當當前元素的值大於棧頂元素時,則直接記錄兩元素下標差值,並且將棧頂元素出棧;若當前元素小於棧頂元素時,則將當前元素入棧。用文字描述也不清晰,下面是演算法具體步驟的描述,參考這位博主的:

**實現:

public static int dailytemperatures(int t) 

stack.push(i);

} return result;

}

執行結果:

739 每日溫度

根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高超過該日的天數。如果之後都不會公升高,請在該位置用 0 來代替。輸入資料 73,74,75,71,69,72,76,73 期望資料 1,1,4,2,1,1,0,0 此種找到乙個數大的值的第乙個數問題,就是明擺著告...

739每日溫度

題目描述 題解思路 我的第一思路就是暴力破解,雙迴圈,從當前結點往後遍歷,找到第乙個大於他的數,然後用count計數,但是這種方法時間複雜度o n2 最後超時,後來優化了一下,如果當前數字和前乙個數字相同,則利用上一次資料 1即可。int dailytemperatures int t,int ts...

739 每日溫度

根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高超過該日的天數。如果之後都不會公升高,請在該位置用 0 來代替。例如,給定乙個列表 temperatures 73,74,75,71,69,72,76,73 你的輸出應該是 1,1,4,2,1,1,0,0 cla...