代码随心录第十一天|Leecode 150. 逆波兰表达式求值 239. 滑动窗口最大值 (难) 347.前 K 个高频元素(难)

Leecode 150. 逆波兰表达式求值

题目链接:https://leetcode.cn/problems/evaluate-reverse-polish-notation/description/

题目描述:

 

思路:逆波兰表达式相当于是二叉树中的后序遍历。将两个数字放入栈中,遇到运算符后将两个数字拿出计算,将计算后的数字放入栈中,后重复。

解答:

 

Leecode239. 滑动窗口最大值 (难)

题目链接:https://leetcode.cn/problems/sliding-window-maximum/description/

题目描述:

思路:

对于窗口里的元素{2, 3, 5, 1 ,4},单调队列里只维护{5, 4} 就够了,保持单调队列里单调递减,此时队列出口元素就是窗口里最大元素。

设计单调队列的时候,pop,和push操作要保持如下规则:

pop(value):如果窗口移除的元素value等于单调队列的出口元素,那么队列弹出元素,否则不用任何操作

push(value):如果push的元素value大于入口元素的数值,那么就将队列入口的元素弹出,直到push元素的数值小于等于队列入口元素的数值为止
保持如上规则,每次窗口移动的时候,只要问que.front()就可以返回当前窗口的最大值。

解答:

 

Leecode  347.前 K 个高频元素(难)

题目链接:https://leetcode.cn/problems/top-k-frequent-elements/description/

题目描述:

思路:堆是一棵完全二叉树,树中每个结点的值都不小于(或不大于)其左右孩子的值。 如果父亲结点是大于等于左右孩子就是大顶堆,小于等于左右孩子就是小顶堆。用小顶堆,因为要统计最大前k个元素,只有小顶堆每次将最小的元素弹出,最后小顶堆里积累的才是前k个最大元素。

解答:

 

posted @ 2025-04-27 22:43  米布丁  阅读(28)  评论(0)    收藏  举报