acwing-栈与队列
# 栈与队列
风有点大
good good study!!!
展开
-
【计蒜客】报数游戏
题目大意代码#include <iostream>#include <queue>using namespace std;int main() { int n,m; cin>>n>>m; queue<int> q; for(int i=1;i<=n;i++){ q.push(i); } int cur=1; //表示当前正在报的数字 while(q.si原创 2021-04-07 16:46:14 · 105 阅读 · 0 评论 -
【计蒜客】数据结构-----队列
队列是什么队列(queue)是一种线性的数据结构。只允许从队列的前端(front)进行删除操作,而在后端(rear)进行插入操作。插入的一端我们称为队尾,删除的一端我们称为队首。插入叫入队,删除叫出队。性质:先进先出队列有哪些基本操作入队:push()出队:pop()访问队首元素:front()访问队尾元素:back()判断队列是否为空:empty()统计队列中元素个数:size()注意事项队列没用clear()函数。在使用front()和pop()函数前,必须使用empty(原创 2021-04-07 11:13:31 · 269 阅读 · 0 评论 -
【acwing】单调队列--154. 滑动窗口
单调队列是一种队列(废话)其中队列的元素保证是单调递增或者是单调递减的那么队首的元素不就是最小(或最大)的吗?单调队列两端弹出元素,队尾插入元素我们结合具体的题目来看看吧:解法1:O(n^2)如果按照常规方法,我们在求a[i] 即i~i+k-1区间内的最值时,要把区间内的所有数都访问一遍,时间复杂度约为O(nk)O(nk)O(nk)。有没有一个快一点的算法呢?解法2:O(n):每个元素最多入队出队一次很明显,当我们在计算区间 [i−k+1,i][i-k+1,i][i−k+1,i]的最大原创 2021-04-02 16:48:53 · 196 阅读 · 0 评论 -
【acwing】829. 模拟队列
队列模板1、普通队列模板// hh 表示队头,tt表示队尾int q[N], hh = 0, tt = -1;// 向队尾插入一个数q[ ++ tt] = x;// 从队头弹出一个数hh ++ ;// 队头的值q[hh];// 判断队列是否为空if (hh <= tt){}2、循环队列模板// hh 表示队头,tt表示队尾的后一个位置int q[N], hh = 0, tt = 0;// 向队尾插入一个数q[tt ++ ] = x;if (tt ==原创 2021-03-31 20:47:31 · 164 阅读 · 0 评论 -
【acwing】830. 单调栈
1、分为单调递增栈和单调递减栈单调递增栈反过来就是单调递减栈2、常用题目类型思路:如果i之前输入的数>=i输入的数,那么i之前的数永远不会输出,那么将之前大的数删除,把当前数放进去,形成一个从栈低到栈顶递增的栈。减小时间复杂度。3、解法3.1 暴力法 O(n^2)for(int i=0;i<n;i++){ for(int j=i-1;j>=0;j--){ if(a[i]>a[j]){ cout<<a[j]<<end; }原创 2021-03-31 20:30:16 · 241 阅读 · 0 评论 -
【AcWing】3302. 表达式求值
题目题解#include<iostream>#include<unordered_map>#include<stack>using namespace std;//存储运算数 运算符stack<int> num;stack<char> op;//建立映射来判断运算优先级unordered_map<char, int> cmp = { {'+', 1}, {'-', 1} , {'*', 2}, {'/'原创 2021-03-31 19:14:22 · 132 阅读 · 0 评论 -
【acwing】828. 模拟栈
模板// tt表示栈顶,指向栈顶元素int stk[N], tt = 0;// 向栈顶插入一个数(从stk[1]开始存数)stk[ ++ tt] = x;// 从栈顶弹出一个数tt -- ;// 栈顶的值stk[tt];// 判断栈是否为空if (tt > 0){}例题代码#include<iostream>using namespace std;const int N=100005;int stk[N];int tt=0;//栈顶指针原创 2021-03-31 11:30:34 · 89 阅读 · 0 评论