栈
文章平均质量分 50
数据结构---栈
(xsj)
模拟只会猜题意
贪心只能过样例
DP一般看规律
数论只会gcd
计算几何瞎暴力
图论只会匈牙利
数据结构没学过
字符串只能干输入
展开
-
剑指 offer acwing 20 用两个栈实现队列
题面 题解 这道题其实非常简单,就是普通的暴力,我们假设向栈中插入 1 2 3 4 5 ,然后模拟对列取出队头元素(取出1),那么我们可以新开一个栈,将这个栈中的元素插入到 cop 栈中 5 4 3 2 1 ,然后取出cop 栈顶元素 就是1 小技巧 :面试时时没有罚时的,我们实在想不到就先用暴力做一遍,如果不行的话再想优化的办法 代码 class MyQueue { public: /** Initialize your data structure here. */ M原创 2021-03-16 17:15:46 · 75 阅读 · 0 评论 -
算法竞赛进阶指南---0x18(单调栈)City Game
题面 题解 1. 我们可以枚举每一行,记录这一行每列连续 F 的个数(如图枚举到第四行) ,F的个数可以从第一行递推求出,这样问题就转化成算法竞赛进阶指南—0x11(栈) 直方图中最大的矩形 对于每一行,我们可以枚举每个高度所能组成的面积最大的长方形,然后取一个最大值即可。就看题中的样例,对于第四列的,只有左右两边的高度>=4 才能组成要枚举的长方形,那么就要求左右两边的小长方形高度最小为4,可以看到,左边没有,右边2个,所以面积为( 7 - 3 - 1 ) * 4 = 12原创 2021-02-23 13:48:09 · 242 阅读 · 1 评论 -
算法竞赛进阶指南---0x18(栈)表达式计算4
题面 题解 括号序列,表达式的计算几乎都是离不开栈的,对于表达式的计算,我们可以用两个栈来分别存储数字和字符,然后求解 规则: 每次遍历到运算符时,比较当前运算符和栈顶运算符的优先级,只要是栈顶优先级大于等于当前优先级,那么就可以将前面的式子计算 ,具体细节看代码 代码 #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algo原创 2021-02-23 12:05:33 · 145 阅读 · 0 评论 -
算法竞赛进阶指南---0x18(栈)括号画家
题面 题解 大多数括号匹配的题都是与栈有关联的,一个完美的括号序列,总是左右括号能完全匹配,所以如果一段括号序列为完美序列,那么最好扫描完栈一定是空的 此题我们是求一段序列中的最长完美序列,那么我们就将左括号入栈,遇到右括号就判断是否能和栈顶括号匹配,如果不能就入栈,每次都更新一下最大匹配长度即可 代码 #include<iostream> #include<cstdio> #include<string> #include<cstring>原创 2021-02-18 18:21:55 · 150 阅读 · 0 评论 -
算法竞赛进阶指南---0x11(栈) 直方图中最大的矩形
题面 题解 单调栈经典例题,注意数据范围结果是long long 题中要求做组成的面积最大,那么我们可以枚举每个高度所能组成的面积最大的长方形,然后取一个最大值即可 3.就看题中的样例,对于高度为4的,只有左右两边的高度>=4 才能组成要枚举的长方形,那么就要求左右两边的小长方形高度最小为4,可以看到,左边没有,右边1个,所以面积为2*4=8 **那么转化就是,我们可以记录左边离他最近且小于它的高度的下标,右边离他最近且小于它高度的下标,那么(右-左-1)就是这个高度对应的最长的长度,**这不原创 2021-02-07 20:57:13 · 182 阅读 · 0 评论 -
acwing 830 单调栈
题面 题解 先考虑暴力做法 ,看数据范围1e5 ,O(n2)肯定过不了 ,那么我们考虑优化内层循环 for(int i=0;i<n;i++){ //循环每一个数 for(int j=i-1;j>=0;j--){ //从这个数的左边开始往前找 if(a[i]>a[j]){ break; } } } (重点)题中要求数左边离它最近且比它小的数,我们可以原创 2021-02-07 19:43:53 · 136 阅读 · 0 评论 -
算法进阶指南---0x11(栈)包含min函数的栈
题面 题解 要实现O(1) 查找栈中最小元素,我们先看一般O(n) 做法就是遍历一遍栈找到最小 我们可以再维护一个栈,st_min 放栈中最小的元素(单调栈),表示前i个元素最小值是多少, 在每次入栈时,只要比较新加入的元素和st_min的栈顶元素谁小,然后放入栈中即可 代码 class MinStack { public: /** initialize your data structure here. */ stack<int> st, st_m原创 2021-02-01 21:51:05 · 142 阅读 · 1 评论 -
算法竞赛进阶指南---0x11 (栈)火车进栈
题面 题解1 直接模拟进出栈过程,state1表示已经出栈的火车,可以用vector来存,state2 表示栈中火车,可以用stack来存,state3表示未进栈的火车,可以用数字来存 两个操作图中1操作是火车进栈,2是火车出栈,因为要按照字典序输出,应该先执行操作2,执行操作1来保证字典序正确 直接用dfs来暴力模拟过程,即可输出答案 代码1 #include<bits/stdc++.h> using namespace std; int n,cnt=20; vector&l原创 2021-02-02 18:54:36 · 339 阅读 · 0 评论 -
算法竞赛进阶指南---0x11(栈) Editor
题面 题解 通过观察我们可以将这个序列通过2个栈和2个数组来维护5种操作进而达到题解,为了方便,直接用数组来模拟栈 stkl[N](光标左边的栈), stkr[N](光标右边的栈), tl(左栈指针), tr(右栈指针); s[N](前缀和数组), f[N](最大前缀和); 对于第一个操作,在光标处插入x,就是给stkl 的栈顶插入一个x, 前缀和数组更新,最大前缀和就是新的前缀和 和 上一个前缀和取最大 将光标前面的第一个元素删除,就是将stkl的栈顶元素删除 将光标向左移动,跳过一个元素,就原创 2021-02-04 21:20:39 · 197 阅读 · 0 评论