算法與數據結構基礎 - 隊列(Queue)

隊列基礎前端

隊列具備「先進先出」的特色,用這個特色咱們能夠用它來處理時間序列相關或前後次序相關的問題,例如 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

582. Kill Process  題解

 

deque雙端隊列

相比queue支持前端刪除、尾端插入,deque支持前端插入/刪除、尾端插入/刪除,若是前端和尾端都須要插入/刪除,則應選用雙端隊列deque。

 

相關LeetCode題:

641. Design Circular Deque  題解

862. Shortest Subarray with Sum at Least K  題解

353. Design Snake Game  題解

相關文章
相關標籤/搜索