栈与队列
文章平均质量分 83
栈与队列
gyjllll
这个作者很懒,什么都没留下…
展开
-
栈与队列总结篇
在栈与队列系列中,我们强调栈与队列的基础,也是很多同学容易忽视的点。使用抽象程度越高的语言,越容易忽视其底层实现,而C++相对来说是比较接近底层的语言。我们用栈实现队列,用队列实现栈来掌握的栈与队列的基本操作。接着,通过括号匹配问题、字符串去重问题、逆波兰表达式问题来系统讲解了栈在系统中的应用,以及使用技巧。通过求滑动窗口最大值,以及前K个高频元素介绍了两种队列:单调队列和优先级队列,这是特殊场景解决问题的利器,是一定要掌握的。原创 2023-12-14 21:50:49 · 873 阅读 · 0 评论 -
347. 前 K 个高频元素(中等)
寻找前k个最大元素流程如图所示:(图中的频率只有三个,所以正好构成一个大小为3的小顶堆,如果频率更多一些,则用这个小顶堆进行扫描)我们来看一下C++代码:原创 2023-12-14 10:36:31 · 840 阅读 · 0 评论 -
239. 滑动窗口最大值(困难)
每次窗口移动的时候,调用que.pop(滑动窗口中移除元素的数值),que.push(滑动窗口添加元素的数值),然后que.front()就返回我们要的最大值。对于窗口里的元素{2, 3, 5, 1 ,4},单调队列里只维护{5, 4} 就够了,保持单调队列里单调递减,此时队列出口元素就是窗口里最大元素。此时我们需要一个队列,这个队列呢,放进去窗口里的元素,然后随着窗口的移动,队列也一进一出,每次移动之后,队列告诉我们里面的最大值是什么。但如果把窗口里的元素都放进队列里,窗口移动的时候,队列需要弹出元素。原创 2023-12-14 10:05:58 · 869 阅读 · 0 评论 -
150. 逆波兰表达式求值
该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6。该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9。逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。返回一个表示表达式值的整数。当遇到运算符,则把运算符前面的两个数进行运算,原创 2023-12-11 23:06:17 · 383 阅读 · 0 评论 -
1047. 删除字符串中的所有相邻重复项
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。我们在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,那么如何记录前面遍历过的元素呢?所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。从栈中弹出剩余元素,此时是字符串ac,因为从栈里弹出的元素是倒序的,所以再对字符串进行反转一下,就得到了最终的结果。原创 2023-12-11 22:33:22 · 402 阅读 · 0 评论 -
20. 有效的括号
给定一个只包括'('')''{''}''['']'的字符串s,判断字符串是否有效。原创 2023-12-11 21:42:44 · 765 阅读 · 0 评论 -
225. 用队列实现栈
C++优化代码。原创 2023-12-06 22:10:47 · 772 阅读 · 0 评论 -
232. 用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):实现MyQueueint pop()int peek()truefalsesizeis empty100pushpoppeekemptypoppeek这是一道模拟题,不涉及到具体算法,考察的就是对栈和队列的掌握程度。使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈,这里要注意输入栈和输出栈的关系。原创 2023-12-06 18:39:40 · 1014 阅读 · 0 评论