隊列基礎前端
隊列具備「先進先出」的特色,用這個特色咱們能夠用它來處理時間序列相關或前後次序相關的問題,例如 LeetCode題目 933. Number of Recent Calls,時間複雜度O(1):git
//933. Number of Recent Calls private queue<int> q; public int ping(int t) { q.push(t); while(q.front()<t-3000) q.pop(); return q.size(); }
嘗試用queue求解這樣一個問題:假設某服務對單個IP限制訪問1000次/min,輸入爲ip、TimeStamp;返回爲bool,超過限制返回false,不然返回true。github
相關LeetCode題:spa
933. Number of Recent Calls 題解code
346. Moving Average from Data Stream 題解blog
622. Design Circular Queue 題解隊列
隊列應用於BFSip
也經常應用隊列先進先出的特性,模擬廣度優先搜索(BFS)過程,例如 LeetCode題目 582. Kill Process,時間複雜度O(n):ci
//582. Kill Process class Solution { public: vector<int> killProcess(vector<int>& pid, vector<int>& ppid, int kill) { vector<int> res; unordered_map<int,unordered_set<int>> m; for(int i=0;i<pid.size();i++) m[ppid[i]].insert(pid[i]); queue<int> q; q.push(kill); while(!q.empty()){ int p=q.front();q.pop(); res.push_back(p); for(auto child:m[p]) q.push(child); } return res; } };
相關LeetCode題:leetcode
deque雙端隊列
相比queue支持前端刪除、尾端插入,deque支持前端插入/刪除、尾端插入/刪除,若是前端和尾端都須要插入/刪除,則應選用雙端隊列deque。
相關LeetCode題: