代码随想录day12 逆波兰表达式求值 | 滑动窗口最大值 | 前 K 个高频元素

逆波兰表达式求值

逆波兰表达式求值

解题思路

使用堆栈数据结构,把数存进栈,当遇到运算符号的时候,弹出堆栈顶两个数,得到运算结果后再压入堆栈

知识点

堆栈

心得

这个很像编译原理中如何编译数字和运算符号的内容,也当作是一种复习了。

滑动窗口最大值

滑动窗口最大值

解题思路

这道题采用了一个单调队列,这个队列有着独特的压入和弹出时机,也是这道题的难点,即如何控制队列的压入和弹出。当滑动窗口移到下一个时,查找队列底部的值是否为被移除的值(即那个不在下一个滑动窗口的值)。而新的值则和之前队列的值进行比较,如果新的值大,则弹出队列尾部保存的值,如此循环直到遇到小于新的值的元素。在移动到下一个滑动窗口之前,队列的尾部就是当前滑动窗口的最大值

知识点

滑动窗口,队列,单调队列

心得

难,第一次做根本想不到这个逻辑。

前 K 个高频元素

前 K 个高频元素

解题思路

用哈希表得到每个数的出现频率,随后将哈希表的结果放入优先级队列进行排序,使用优先级队列的好处是不需要处理全部的元素,只需要处理k个元素即可。优先级队列使用的是小顶堆,即完全二叉树的每个父节点的值都小于等于其左右子节点,因为本题需要找到的是前k个重复频率最高的,采用小顶堆无需遍历所有频率,时间复杂度更低。

知识点

哈希表,优先级队列,大顶堆,小顶堆

心得

第一次在C++中使用priority_queue这个数据结构,还不太熟悉它的用法,得好好补习。

posted @ 2024-07-03 00:31  不进育碧不改名  阅读(206)  评论(0编辑  收藏  举报