队列基础前端
队列具备“先进先出”的特色,用这个特色咱们能够用它来处理时间序列相关或前后次序相关的问题,例如 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题: