C++中queue和deque的区别
queue只能从队尾插入,对头弹出
queue<int> q;
q.push(0); // 插入
q.pop(); // 弹出
int tmp = q.front(); // 取对头元素
int tmp = q.back(); // 取队尾元素
deque 能从对头插入弹出,还可以从队尾插入弹出
deque<int> dq;
dq.push_front(0);//对头插入
dq.push_back(0);//对尾插入
dq.pop_front();//对头弹出
dq.pop_back();//队尾弹出
int tmp = dq.front(); // 取对头元素
int tmp = dq.back(); // 取队尾元素
判断是否为空
q.empty()
dq.empty()
! 没有size()函数;
使用queue进行bfs()
使用deque实现单调队列,进行求滑动窗口最大值
vector<int> maxSlidingWindow(vector<int>& nums, int k)
{
if (nums.size() == 0 or k <= 0 or nums.size() < k)
return {};
deque<int> dq;
int i = 0;
vector<int> res;
while (i < k)
{
while (!dq.empty() and nums[i] > nums[dq.back()])
dq.pop_back();
dq.push_back(i);
i++;
}
res.push_back(nums[dq.front()]);
for (int i = k; i < nums.size(); i++)
{
if (i - dq.front() >= k)
{
dq.pop_front();
}
while (!dq.empty() and nums[i] > nums[dq.back()])
dq.pop_back();
dq.push_back(i);
res.push_back(nums[dq.front()]);
}
return res;
}