1. 程式人生 > >leetcode739+判斷每一位數字後面比他第一個大的數字相差位置,stack

leetcode739+判斷每一位數字後面比他第一個大的數字相差位置,stack

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.