Day11 栈与队列part02

38 阅读2分钟

概念

刷题

  1. 逆波兰表达式求值

leetcode.cn/problems/ev…

image.png

这道题也是使用栈来处理

解题思路:

遍历输入的字符串切片,判断字符串元素是否为 + - * / 这四个符号,其余都可以转化成int类型(题目限制,不用考虑其他类型),如果是符号,取出栈顶的两个元素进行计算,将结果压回栈中,反之,将元素转化成int类型,压入栈中,最终取出栈中的最后一个元素,即为结果。

image.png

  1. 滑动窗口最大值 leetcode.cn/problems/sl…

image.png

这道题目使用自定义单调队列来解决

解题思路: 因为题目只需要输出滑动窗口中的最大值,滑动窗口可以看作是一个先进先出的队列,但不需要记录所有的值,把这个队列进行据记录为单调递减的形式。那么第一个数就是这个滑动窗口的最大值,即我们要的结果。

这个队列就被称为单调队列,需要实现几个方法:

pop:队列的头被删掉,这里首先检查队列长度大于0,然后比较被删的元素和maxone是否相等,如果他就是滑动窗口的最大值,删掉单调队列的头元素。

push:队列加入一个新元素,这里需要检查单调队列是否为空,为空直接append。否则判断最后一个元素是否小于新加的元素,小于则删掉最后一个元素,继续比较上一个,以此类推,退出循环后,把新元素加入单调队列的队尾

maxone:返回单调队列的第一个元素

  1. 前k个高频元素

leetcode.cn/problems/to…

image.png

这道题目使用小根堆来解决

总结