根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高超過該日的天數。如果之後都不會公升高,請在該位置用 0 來代替。
例如,給定乙個列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的輸出應該是 [1, 1, 4, 2, 1, 1, 0, 0]。
一。超時暴力
正常能想到的大暴力演算法 , 雙重for迴圈,第一層迴圈i從0到len , 第二層迴圈j從i+1到len , 通過判斷存下索引的差值 , 但是35/37 超時遼。
二。暴力
逆序遍歷列表存下每個值的索引 ( 注意這裡並不是先一遍for迴圈存下每個值的索引 , 因為有重複的數字,會覆蓋之前的值)
逆序的原因:最後乙個數字一定是0 , 通過已知的數來確定前面的數 , 否則就要每次迴圈後面的數來確定有沒有比當前值大。
溫度的範圍在[30, 100] , 那麼如果當前值是t[i] , 只要找到(t[i]+1 ~100)之間與i最近的值就好了 ,因此用nex陣列記錄t[i]的索引 , 然後記下nex[t[i]+1] .......nex[100] 中最小的值與i的差值就是答案。
**:
class solution
}if(op != maxn)
nex[t[i]] = i;
}return ans;
}
三。單調棧
單調棧中記錄的是列表的下標 , 例如有1 4 2 7 3 4 , s為棧
------s(0) 棧中放入1的下標0
4 > 1 因為4>1 所以 0 出棧 ,4的下標1 入棧------1(1) 4 2 7 3 4
------s(1)
2 < 4 因為2<4 所以2的下標2 入棧
4--2-----s(1 , 2)
7 > 2 所以2的下標2出棧------1(1) 4 2(1) 7 3 4
又因為7>4 所以4的下標1出棧------1(1) 4(2) 2(1) 7 3 4
此時棧中s(7)
3 < 7 所以3的下標4入棧
s(7 , 4)
4>3 所以3的下標4出棧 ------1(1) 4(2) 2(1) 7 3(1) 4
4<7 所以4的下標5入棧 , 最後棧中剩的
s(7 , 5)均為0 ------1(1) 4(2) 2(1) 7(0) 3(1) 4(0)
**:
class solution
s.push(i);}}
return ans;
}};
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...