
【堆栈队列类题目】
文章平均质量分 77
LeetCode刷题堆栈类题目总结
Ring*
本科学硬件,研究生学软件!
展开
-
【LeetCode-232】用栈实现队列
每次 pop 或 peek 时,若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。请你仅使用两个栈实现先入先出队列。另一个栈当作输出栈,用于pop 和 peek 操作。将一个栈当作输入栈,用于压入。...原创 2022-08-07 15:58:27 · 78 阅读 · 0 评论 -
【LeetCode-225】用队列实现栈
入栈操作时,首先获得入栈前的元素个数 n,然后将元素入队到队列,再将队列中的前 n 个元素(即除了新入栈的元素之外的全部元素)依次出队并入队到队列,此时队列的前端的元素即为新入栈的元素,且队列的前端和后端分别对应栈顶和栈底。为了满足栈的特性,即最后入栈的元素最先出栈,在使用队列实现栈时,应满足队列前端的元素是最后入栈的元素。使用一个队列时,为了满足栈的特性,即最后入栈的元素最先出栈,同样需要满足队列前端的元素是最后入栈的元素。的前端元素为栈顶元素,因此出栈操作和获得栈顶元素操作都可以简单实现。...原创 2022-08-07 15:55:27 · 170 阅读 · 0 评论 -
【LeetCode-387】字符串中的第一个唯一字符
当我们对字符串进行遍历时,设当前遍历到的字符为c,如果c不在哈希映射中,我们就将c与它的索引作为一个二元组放入队尾,否则我们就需要检查队列中的元素是否都满足「只出现一次」的要求,即我们不断地根据哈希映射中存储的值(是否为−1)选择弹出队首的元素,直到队首元素「真的」只出现了一次或者队列为空。当我们第一次遍历字符串时,设当前遍历到的字符为c,如果c不在哈希映射中,我们就将c与它的索引作为一个键值对加入哈希映射中,否则我们将c在哈希映射中对应的值修改为−1。我们需要进行两次遍历。...原创 2022-07-21 21:32:04 · 116 阅读 · 0 评论 -
【LeetCode-445】两数相加 II
本题的主要难点在于链表中数位的顺序与我们做加法的顺序是相反的,为了逆序处理所有数位,我们可以使用栈把所有数字压入栈中,再依次取出相加。计算过程中需要注意进位的情况。给你两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字0之外,这两个数字都不会以零开头。...原创 2022-07-16 14:37:14 · 83 阅读 · 0 评论 -
【LeetCode-42】接雨水
如果当前的条形块小于或等于栈顶的条形块,我们将条形块的索引入栈,意思是当前的条形块被栈中的前一个条形块界定。如果我们发现一个条形块长于栈顶,我们可以确定栈顶的条形块被当前条形块和栈的前一个条形块界定,因此我们可以弹出栈顶元素并且累加答案到ans。从动态规划方法的示意图中我们注意到,只要right_max[i]>left_max[i](元素0到元素6),积水高度将由left_max决定,类似地left_max[i]>right_max[i](元素8到元素11)。...原创 2022-07-16 14:34:32 · 236 阅读 · 0 评论 -
【LeetCode-150】逆波兰表达式
如果遇到运算符,则将两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数,使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。空间复杂度O(n),其中n是数组tokens的长度。使用栈存储计算过程中的数,栈内元素个数不会超过逆波兰表达式的长度。时间复杂度O(n),其中n是数组tokens的长度。时间复杂度O(n),其中n是数组tokens的长度。可以保证给定的逆波兰表达式总是有效的。整个逆波兰表达式遍历完毕之后,栈内只有一个元素,该元素即为逆波兰表达式的值。...原创 2022-07-16 14:31:12 · 153 阅读 · 0 评论 -
【LeetCode-496】下一个更大元素 I
就将当前单调栈中所有小于$\textit{nums}_2[i]$的元素弹出单调栈,当前位置右边的第一个更大的元素即为栈顶元素,如果栈为空则说明当前位置右边没有更大的元素。是没有重复元素的,所以我们可以使用哈希表来解决第2个子问题,将元素值与其右边第一个更大的元素值的对应关系存入哈希表。,并用单调栈中维护当前位置右边的更大的元素列表,从栈底到栈顶的元素是单调递减的。中对应位置的右边的第一个更大的元素值时不需要再遍历。中元素的顺序而不需要用到下标,所以栈中直接存储。中每个元素右边的第一个更大的值;...原创 2022-07-16 11:39:41 · 122 阅读 · 0 评论 -
【LeetCode-739】 每日温度
又由于遍历到温度列表中的每个元素时都会更新数组next中的对应温度的元素值,因此对于任意t,当next[t]不为无穷大时,令j=next[t],则j是满足temperatures[j]==t且i原创 2022-07-16 11:37:32 · 85 阅读 · 0 评论 -
【LeetCode-503】下一个更大元素II
一个朴素的思想是,我们可以把这个循环数组「拉直」,即复制该序列的前n−1个元素拼接在原序列的后面。但是注意到只遍历一次序列是不够的,例如序列[2,3,1],最后单调栈中将剩余[3,1],其中元素[1]的下一个更大元素还是不知道的。而在本题中,我们不需要显性地将该循环数组「拉直」,而只需要在处理时对下标取模即可。单调栈中保存的是下标,从栈底到栈顶的下标在数组。每次我们移动到数组中的一个新的位置i,我们就将当前单调栈中所有对应值小于。的下标弹出单调栈,这些值的下一个更大元素即为。...原创 2022-07-16 11:36:18 · 171 阅读 · 0 评论 -
【LeetCode-20】有效的括号
如果不是相同的类型,或者栈中并没有左括号,那么字符串s无效,返回False。当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。注意到有效字符串的长度一定为偶数,因此如果字符串的长度为奇数,我们可以直接返回False,省去后续的遍历判断过程。在遍历结束后,如果栈中没有左括号,说明我们将字符串s中的所有左括号闭合,返回True,否则返回False。给定一个只包括‘(’,‘)’,‘{’,‘}’,‘[’,‘]’的字符串s,判断字符串是否有效。...原创 2022-07-16 11:34:52 · 67 阅读 · 0 评论