1。直接遍歷 暴力求解
classsolution
//到了最後乙個元素,但是還是沒找到比t[i]大的
} }
}
return
res;
}};
2 利用棧
我們需要找到比當前 t[i] 溫度更高的位置,那麼必須要記錄哪些資訊?
我們試著找到 t[0] 過後溫度公升高的位置。如果知道 t[10]=50,則 t[20]=50 是無效資訊,因為 t[i] 在 t[20] 以前已經到達了 50。如果 t[20]=100 將是有用的資訊,因為如果 t[0]=80,那麼 t[20] 將有可能是它的下乙個溫度公升高的位置,而 t[10] 則不可能是。
因此,我們需要記住乙個索引的列表,索引代表的溫度嚴格遞增。我們可以利用棧來實現這樣的效果。
演算法:我們用棧記錄索引,滿足 t[stack[-1]] < t[stack[-2]] < ...,其中 stack[-1] 是棧的頂部,stack[-2] 是從頂部開始的第二個元素,依此類推;我們將在處理每個 t[i] 時保持 stack[-1] > stack[-2] > ...。
我們通過當前溫度和棧頂索引所代表的溫度比較來找到溫度公升高的位置。
舉個例子:我們反向遍歷處理 t=[73,74,75,71,69,72,76,73] ,通過看棧元素的變化來理解是如何工作的。為了清楚 stack 只包含索引 i,但是將把 t[i] 的值寫在旁邊的括號中,例如 0 (73)。
當 i = 7,stack = [7 (73)]。ans[i] = 0。
當 i = 6,stack = [6 (76)]。ans[i] = 0。
當 i = 5,stack = [5 (72), 6 (76)]。ans[i] = 1。
當 i = 4,stack = [4 (69), 5 (72), 6 (76)]。ans[i] = 1。
當 i = 3,stack = [3 (71), 5 (72), 6 (76)]。ans[i] = 2。
當 i = 2,stack = [2 (75), 6 (76)]。ans[i] = 4。
當 i = 1,stack = [1 (74), 2 (75), 6 (76)]。ans[i] = 1。
當 i = 0,stack = [0 (73), 1 (74), 2 (75), 6 (76)]。ans[i] = 1。
classsolution
return
res;
}};
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...