第五章 栈与队列part02
150. 逆波兰表达式求值
本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题
题目链接/文章讲解/视频讲解:https://programmercarl.com/0150.%E9%80%86%E6%B3%A2%E5%85%B0%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B1%82%E5%80%BC.html
题目感想:
1.直接通过栈,遇到符号压出前面两个数字进行计算,将结果再次入栈;
239. 滑动窗口最大值 (有点难度,可能代码写不出来,但一刷至少需要理解思路)
之前讲的都是栈的应用,这次该是队列的应用了。
本题算比较有难度的,需要自己去构造单调队列,建议先看视频来理解。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.html
题目感想:
1.思路就是通过构建一个单调队列,如果新加入的元素大于之前末尾的元素,则去除之前末尾的元素进行循环,直到末尾元素大于新元素或者队列为空;之后弹出peek就是最大的;
347.前 K 个高频元素 (有点难度,可能代码写不出来,一刷至少需要理解思路)
大/小顶堆的应用, 在C++中就是优先级队列
本题是 大数据中取前k值 的经典思路,了解想法之后,不算难。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0347.%E5%89%8DK%E4%B8%AA%E9%AB%98%E9%A2%91%E5%85%83%E7%B4%A0.html
题目感想:
1.就是先通过map进行出现频次的统计,之后将其加入优先级队列,有大顶堆和小顶堆两种实现,主要关乎的就是从大到小还是从小到大;
2.如果是大顶堆那就可以直接输出前k个就行了,小顶堆的话得最后输出的k个才是我们需要的,然后需要倒叙排列一下;