美文网首页
leetcode-day11-栈与队列

leetcode-day11-栈与队列

作者: 独孤蝴蝶 | 来源:发表于2023-06-18 20:04 被阅读0次

    滑动窗口最大值

    题解:

    使用单调队列,放进去窗口里的元素,随着窗口的移动,队列也一进一出,每次移动之后,就会得到窗口的最大值是什么。队列里的数据一定是要排序的,不然不知道最大值,但如果吧窗口里的元素都放进队列里,窗口移动的时候,队列需要弹出元素,其实队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是有大到小的。采用单调递减队列

    设计打你到队列的时候:

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

    push(value):如果push的元素value大于入口的元素,那么将队列入口的元素弹出,直到push元素的数值小于等于队列入口元素的数值为止

    front,返回的是队列窗口最大值

    代码:

    前K个高频元素

    题解:

    涉及到三个内容:

    1.统计元素出现的频率

    2.对频率排序

    3.找出前k个高频元素

    使用优先队列,也就是堆,使用大顶堆还是小顶堆。

    大顶堆:定义个大小为k的大顶堆,在每次移动更新大顶堆的时候,每次弹出都把最大的元素弹出,如何保留下来前k个高频元素?而且使用大顶堆就要吧所有元素进行排序

    小顶堆:统计最大前k个元素,只有小顶堆每次将最小的元素弹出,最后小顶堆里积累的才是前k个最大元素

    因此使用小顶堆

    代码:

    相关文章

      网友评论

          本文标题:leetcode-day11-栈与队列

          本文链接:https://www.haomeiwen.com/subject/telsydtx.html