代码随想录 代码随想录
整体来讲,这两个题都不简单,没做过的话基本没有思路。但是看了讲解之后,觉得十分精彩,记录一下。
滑动窗口最大值
三个点:第一,如果现在循环到一个新的元素的值大于队列末尾值,pop队列末尾值
第二,如果现在队列里的元素标号的最后一个减掉第一个超过k,pop第一个元素popleft,也就是维护一个长度为k的队列
第三,如果现在循环的值大于k,每循环一次就要append一个结果,这个结果就是队列头的值也就是queue[0]
前k个高频元素
思路是先用Counter统计数组里元素及其出现的次数
然后维护一个小顶堆,小顶堆里按照freq排序(这里要用到map.items())
一旦长度大于k,那就pop最小的值
最后按照倒序输出堆里freq对应的value