栈/单调栈
栈、单调栈
algsup
这个作者很懒,什么都没留下…
展开
-
[对顶栈]leetcode6093:设计一个文本编辑器(hard)
题目:题解:代码如下:原创 2022-06-05 15:40:36 · 163 阅读 · 0 评论 -
[栈]leetcode2197:替换数组中的非互质数(hard)
题目:题解:思路:用栈模拟相邻元素的删除操作代码如下:using LL = long long;class Solution {public: // 相邻元素的删除,用栈思考才是最简单的方式 vector<int> replaceNonCoprimes(vector<int>& q) { // 初始化栈 vector<int> res;res.push_back(q[0]);原创 2022-05-19 16:18:57 · 177 阅读 · 0 评论 -
[栈]leetcode2216:美化数组的最少删除数(medium)
题目:题解:思路:用栈模拟相邻元素之间的删除操作即可。代码如下:class Solution {public: // 题目要求是删除某个元素后,其左边元素的位置不变,而将右边的元素向左平移补全空缺,所以显然要将左边元素放在栈中才能有效的满足题意 int minDeletion(vector<int>& a) { int n=a.size(); // 模拟栈,以及初始化栈 vector<int>原创 2022-05-19 15:29:46 · 212 阅读 · 0 评论 -
[滑动窗口][栈]leetcode2273:移除字母异位词后的结果数组(easy)
题目:题解:思路1:滑动窗口使窗口每次滑动到下一个异位词即可,每次添加该窗口内的第一个字符串即可思路2:栈用栈来模拟相邻元素之间的删除操作,枚举字符串数组中的每个元素的时候,每次和栈顶元素比较是否为异位词,如果不是异位词就进行入栈操作。枚举结束后,栈中所有元素就是不相邻的所有异位词了。代码如下:// 思路 1 代码class Solution {public: vector<string> removeAnagrams(vector<stri原创 2022-05-19 14:55:14 · 159 阅读 · 0 评论 -
[栈][模拟]leetcode946:验证栈序列(medium)
题目:题解:思路:用栈模拟即可,对于pushed数组中每个元素进行入栈,然后判断栈顶元素是否与popped数组中下一个要pop的元素是否相等,相等就弹栈,然后继续判断。代码如下:class Solution {public: // 思路:每次将pushed数组中的元素加入栈中,然后判断栈顶元素是否与popped中下一个要pop的值相等,相等就pop,不相等就不做什么;最后判断栈是否为空来判断栈是否合法 bool validateStackSequences(vector&原创 2022-02-17 10:08:39 · 385 阅读 · 0 评论 -
[栈]leetcode1190:反转每对括号间的子串(medium)
题目:题解:思路:本题思路好想,就是编码难处理,直接看官方的吧。。代码如下:class Solution {public: string reverseParentheses(string s) { stack<string> stk; string res; for(char ch:s){ // 遇到'(',则添加该字符串到stack中,表示缓存外层括号中的字符串 if原创 2022-02-13 21:18:08 · 156 阅读 · 0 评论 -
[栈]leetcode735:行星碰撞(medium)
题目:题解:思路:用栈解决,本题是个很有意思的题。先想想什么情况下会发生碰撞?1)栈顶元素负值(向左飞行),那么无论当前遍历到的元素为正值(向右飞行)、负值(向左飞行,相同方向速度一样,不会发生碰撞),二者都不会发生碰撞。2)栈顶元素正值(向右飞行),若无论当前遍历到的元素为正值(向右飞行),二者不会发生碰撞;栈顶元素正值(向右飞行),若无论当前遍历到的元素为负值(向左飞行),二者相向飞行,必定发生碰撞。算法步骤:1)当栈顶元素为负值(向左飞行)时,无论当前元素为正值(向右飞行原创 2022-01-19 09:49:34 · 771 阅读 · 0 评论 -
[栈]leetcode224:基本计算器(hard)
题目:题解:利用中缀表达式直接求值的运算法则来做,使用两个栈:符号栈和数字栈。当遍历到的字符的优先级大于>符号栈的栈顶元素的优先级时,才入栈;否则就弹出操作符,以及数字栈的两个元素,进行运算,直到符号栈的栈顶元素优先级 小于<当前操作符时,才将当前操作符入栈。当所有操作符处理完毕(即操作符栈为空时),数字栈中剩下的唯一元素为最终表达式的值。代码如下:class Solution {public: // 预处理空格和()里面出现首个数字为负数的情况,将"(-"替换原创 2021-03-10 21:17:36 · 241 阅读 · 0 评论 -
[单调栈]leetcode1727:重新排列后的最大子矩阵(medium)
题目:题解:题解1:本题与85. 最大矩阵相比就多了一个排序,为了贪心的寻找面积的最大值。题解2:与题解1思路差不多,不过是直接对原数组进行操作计算每行每个元素的高度,然后遍历数组,对每行元素(高度)进行排序,贪心地计算面积的最大值。代码如下:class Solution {public: // 题解1:前缀和+枚举 int numSubmat(vector<vector<int>>& mat) { int n=mat原创 2021-01-17 21:29:52 · 231 阅读 · 4 评论 -
[单调栈]leetcode85:最大矩阵(hard)
题目:题解:单调栈本题在84. 柱状图中最大的矩形的基础上对每一行都求出每个元素对应的高度,这个高度就是对应的连续1的长度,然后对每一行都更新一次最大矩形面积。那么这个问题就变成了Largest Rectangle in Histogram。本质上是对矩阵中的每行,均依次执行84题算法。代码如下:class Solution {private: //利用84题最大矩阵...原创 2019-12-28 10:38:11 · 267 阅读 · 0 评论 -
[单调栈]leetcode84:柱状图中最大的矩形(hard)
题目:84. 柱状图中最大的矩形题解:题解1:暴力法,直接从每个矩形开始寻找最大的矩形,时间复杂度O(n)。题解2:分治法,感觉和暴力法思路一样,不过是利用最小矩形将大矩形分为左右两部分,注意每次还要计算左右边界形成的最大矩形。题解3:递增栈,维护一个递增栈,为了代码方便我们在数组头尾添加两个0,然后遇到a[i]<s.top()时,我们需要计算以cur=s.top()为高(...原创 2019-12-27 00:26:30 · 261 阅读 · 0 评论 -
[栈](递减栈)leetcode739:每日温度
题目:解题思路:先说说题目意思,当时我看到这题是一脸懵逼的,并不知道知道是啥意思,后来在一位小伙伴的帮助下,勉强读懂。题目的意思就是说,假定一个数组a,对于a的每任意一个元素a[i],求出j-i(满足a[j]>a[i],j>i)并存入为数组b[i],如果j不存在,b[i]为0(b[i]和a[i]的"i"一样)。==解题思路:==就是利用递减栈进行解题(暴力双重for解题会超时)...原创 2019-08-11 12:32:17 · 260 阅读 · 0 评论 -
[单调栈][贪心]leetcode402:移掉K位数字(medium)
题目:题解:单调栈,维持一个递增栈,当前元素小于栈顶元素,则移除栈顶元素思想:贪心思想,较小的元素在栈的底部,优先从最高位开始考虑代码如下:class Solution {public: //题解:单调栈,维持一个递增栈,当前元素小于栈顶元素,则移除栈顶元素 //思想:贪心思想,较小的元素在栈的底部 //递增栈:栈的元素从栈底到栈顶是递增的 s...原创 2019-12-10 15:34:23 · 255 阅读 · 0 评论