代码随心录第十一天|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个最大元素。
解答: