【刷题DAY12】239, 347.md

239. 滑动窗口最大值

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

0x1 看到题目的第一想法

0x2 自己实现过程中遇到哪些困难

  • 单调队列:队列里单调递减或递增

0x3 今日学习的文章链接,或者视频链接

0x4 看完代码随想录之后的想法

  • 滑动窗口最大值
    • 单调队列
      • 自己定义push, pop以满足此题需求
      • 先将前k(窗口大小)的元素放进队列(push),然后开始滑动窗口。
      • 滑动窗口首先要移除最前面的元素(pop),然后将最后新进来的加入队列(push)
      • 记录最大值(取队头[0]元素)
    • pop
      • 每次弹出的时候,比较队头[0]元素是不是和窗口要移除的元素相等,如果相等,则弹出
      • 同时比较队列是否为空
    • push
      • 如果新进来的这个数比队尾[-1]的数大,那么把这些小的数都从队尾巴弄出去,然后再将这个新数放进来,这样就保持了整个队列从大到小的单调性

0x5 今日收获,记录一下自己的学习时长

  • 滑动窗口最大值
    • 自定义单调队列
  • 2h

347. 前 K 个高频元素

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

0x1 看到题目的第一想法

0x2 自己实现过程中遇到哪些困难

  • 到处都是困难,python不知道怎么实现

0x3 今日学习的文章链接,或者视频链接

0x4 看完代码随想录之后的想法

  • 要统计元素出现频率;对频率排序;找出前K个高频元素
  • 用小顶堆,因为要统计最大前k个元素,只有小顶堆每次将最小的元素弹出,最后小顶堆里积累的才是前k个最大元素。

0x5 今日收获,记录一下自己的学习时长

  • 前 K 个高频元素
    • 小顶堆
    • 优先队列
  • 2h

待重点复习

239, 347

总结

  • 滑动窗口最大值
    • 自定义单调队列
  • 前 K 个高频元素
    • 小顶堆
    • 优先队列