LeetCode 739 每日溫度

2021-10-12 12:47:38 字數 1077 閱讀 5569

兩種方法:

方法一:優化後的暴力搜尋

正常暴力搜尋,就是遍歷陣列,對於每個溫度向後查詢到第乙個高於當前溫度的日期,對應的日期差即距離

優化後的暴力搜尋

從後往前遍歷,對於當前日期的溫度也是向後查詢到第乙個高於當前溫度的日期

優化步驟:

用乙個變數a記錄當前遇到的最高溫度,這樣可以用來減小不必要的搜尋

用乙個陣列b記錄要想觀測到更高的氣溫,至少需要等待的天數

用乙個陣列c記錄下乙個更高氣溫對應的溫度,這樣減小重複搜尋

vectordailytemperatures(vector& t) else if(index[i+1] == 0)else{

int j = i+1; //j永遠是當前i的下一天

bool flag = false;

for(;jif(temper[j] > t[i]){ 

index[i]+=(index[j]+1);

temper[i] = temper[j];

flag = true;

break;

if(!flag)

index[i]+=(index[j]);

j+=(index[j]-1);

return index;

方法二:用棧記錄沒有訪問過但還沒找到更高溫度的溫度,複雜度為o(n)

從前往後遍歷,將還沒有找到更高溫度的日期入棧,並且棧中溫度高的放下面,溫度低的放上面

每次都判斷棧頂元素是否找到了更高的溫度,更新

vectordailytemperatures(vector& t) {

vectorindex(t.size(),0);

stackdesc_st;

desc_st.push(0);

for(int i=1;iwhile(!desc_st.empty() && t[i] > t[desc_st.top()]){

index[desc_st.top()] = (i-desc_st.top());

desc_st.pop();

desc_st.push(i);

return index;

結論:方法一 優於方法二

LeetCode 739 每日溫度

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

LeetCode 739 每日溫度

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

leetcode739 每日溫度

即找之後第乙個比自己大的元素 參考 用棧實現 將元素 下標 依次入棧並且保證棧內元素從棧頂到棧底是遞增的。如果當前元素比棧頂元素大,則說明當前元素就是比棧頂元素大的第乙個元素,求出兩個下標的差值即為棧頂元素對應的結果。依次出棧並計算下標差直到棧頂元素大於當前元素,將當前元素入棧 比如 t 73,74...