leetcode739_每日溫度_單調棧

一. 這題求的是第一個升高的溫度並計算天數, 正常思路是當前溫度和後面所有溫度進行比較,時間複雜度O(n^2). 

二. 因此我們考慮維護一個單調遞減棧.當前數字如果大於棧頂元素, 就不是單調棧, 且這也是第一個我們需要計算的天數,因此計算天數後 , 棧頂出棧, 當前數入棧, 並重復, 時間複雜度 O(n). 因爲每個數字最多壓入和彈出堆棧一次.

// 單調遞減棧
class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& T) {
        int len = T.size();
        vector<int> res(len,0);
        stack<int> st;
        if(len==1) return res;
        for(int i=0;i<len;i++) {
            //棧不爲空且當前元素不滿足單調遞減,
            //反覆執行,計算天數,直到滿足單調棧爲止.
            while (!st.empty() && T[i]>T[st.top()]) {
                int tmp = st.top();
                st.pop();
                res[tmp] = i-tmp;
            }
            //當前位置永遠都會入棧,因爲每個元素都要計算天數.
            st.push(i);
        }
        return res;
    }
};

發佈了95 篇原創文章 · 獲贊 26 · 訪問量 2132
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章