leetcode739+判斷每一位數字後面比他第一個大的數字相差位置,stack
阿新 • • 發佈:2018-11-09
https://leetcode.com/problems/daily-temperatures/description/
class Solution { public: vector<int> dailyTemperatures(vector<int>& T) { int Tsize = T.size(); stack<int> tempStack; vector<int>resut(Tsize, 0); for(int i=0; i<Tsize; i++){ while (tempStack.size()&&T[tempStack.top()]<T[i]) { resut[tempStack.top()] = i-tempStack.top(); tempStack.pop(); } tempStack.push(i); } return resut; } };
初始化: 用堆疊 tempStack儲存當日氣溫, 初始堆疊為空, 預設將第一天的氣溫壓棧(壓棧的其實是’第一天’,而不是第一天的氣溫,就是for迴圈的是才開始沒有進入while,壓棧一個元素). 用向量 result 儲存結果, 初始化長度為氣溫報表長度, 預設值為零.
迴圈: 若棧頂那日的溫度小於for迴圈的T[i], 這兩日的時間間距, 就是更高溫度出現時,’那日’ 需要等待的時間,然後彈出棧頂;然後繼續不斷進行while迴圈,往復彈出棧頂元素, 直到遍歷完整張氣溫報表.
如果while進行不下去,然後把當前的T[i]的i壓入棧
細節: 遍歷完成後, 任有未彈棧的元素, 即說明此元素之後沒有溫度更高的日期, 故無法彈棧. 此時, 這一天的更高溫期待時間為預設值 0.