首页 > 其他分享 >刷题 栈和队列3

刷题 栈和队列3

时间:2022-10-25 15:22:27浏览次数:75  
标签:频数 优先级 队列 最大值 元素 单调 刷题

代码随想录

LeetCode 239. 滑动窗口最大值

carl

优先级队列 #单调队列

思路

  • 优先级队列解法:
    • 窗口移动过程中,不断将新元素加入优先级队列,如果最大值不在范围内,则弹出最大值
    • $$T(n) = O(nlogn)$$
    • $$S(n) = O(n)$$
  • 单调队列解法:
    • 实现一种数据结构,每次移动后,都能直接访问到当前最大
      • 选用队列结构,让队首元素是当前最大
      • 实现上一条,需要保证每次移动后队列都是单调递减,这样才能保证队首元素永远是当前最大值
    • 单调队列队首是确定的最大值,其他元素是当前已知信息下有可能作为最大值的元素,每次移动都会排除确定不能成为最大值的元素
      $$T(n) = O(n)$$
      $$S(n)=O(k)$$
      细节
  • 如何更新数据结构
  • 如何实现单调队列

LeetCode 347. 前 K 个高频元素

carl

优先级队列 #模板 #比较函数 #大顶堆 #小顶堆

思路

  • 遍历保存所有元素的频数 ---> 哈希
  • 频数排序 ---> 优先级队列

细节

  • 哈希中KV是 元素 - 频数

  • 堆中KV要按频数排序,两种思路:

    • 把哈希中的KV对调存入堆中
    • 修改优先级队列的比较函数
  • 优化:

  • 上面是堆的保存所有元素,且排序所有元素,可以考虑堆大小保持为k,每次更新最小元素

    • 这种方式能降低时间复杂度之前$$O(NlogN)$$ 优化后$$O(Nlogk)$$
    • 并降低空间占用,由于更新最小元素,只能使用小顶堆
  • 对调
    ![[Pasted image 20221024232318.png]]

  • 重写比较函数
    LeetCode或随想录
    ![[Pasted image 20221024232554.png]]
    ![[Pasted image 20221024232441.png]]

标签:频数,优先级,队列,最大值,元素,单调,刷题
From: https://www.cnblogs.com/nsf1010/p/16824963.html

相关文章

  • 我摊牌了!真正的灰度队列实现方案!全网你都搜不到!
    背景目前,公司方面RPC调用如Dubbo、Feign已经能支持基于灰度的调用,但是MQ还没有支持灰度的能力,因此导致在测试和生产环境业务验证、消息隔离方面体验比较差,因此我们......
  • js异步编程,eventLoop,消息队列,宏任务,微任务
    1.单线程的JavaScriptJavaScript是一门单线程语言,起因是设计之初js只用来操作dom,对表单进行简单的校验。在这种执行环境简单的情况下,自然就选择了单线程来处理程序......
  • Nodejs+Redis实现简易消息队列
    前言消息队列是存储数据的一个中间件,可以理解为一个容器。生产者生产消息投递到队列中,消费者可以拉取消息进行消费,如果消费者目前没有消费的打算,则消息队列会保留消息,直......
  • CF 253B(队列上维护2个指针后移)
    B.实验误差timelimitpertestmemorylimitpertestinputoutput小明做实验......
  • BZOJ 3192([JLOI2013]删除物品-双堆转头并头队列)
    3192:[JLOI2013]删除物品TimeLimit: 10Sec  MemoryLimit: 128MBSubmit: 123  Solved: 77[​​Submit​​][​​Status​​][​​Discuss​​]Descr......
  • 7-2 队列实现回文
    编写一个程序判断一个字符串是否是回文。回文是指一个字符序列以中间字符为基准两边字符完全相同,如字符序列"ABCDEDCBA"就是回文,而字符序列"ABCDEDBAC"就不是回文。空格不......
  • 【数据结构-队列】队列的基本操作
    目录1顺序表实现队列(循环队列)1.1定义1.2初始化1.3判队空1.4判队满1.5出队1.6入队1.7队长2单向链表实现队列2.1定义2.2初始化2.3判队空2.4判队满2.5出队2.6......
  • 【HDLBits刷题日记】04 Procedures
    Alwaysblock1组合逻辑always块的使用,注意这里的wire和reg综合出来的结果是一样的,这里只是verilog语法导致二者声明不一样。//synthesisverilog_input_versionverilog......
  • 阻塞队列介绍
    阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。1)支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列......
  • leetcode刷题二十九
    leetcode刷题二十九题目叙述你和一群强盗准备打劫银行。给你一个下标从0开始的整数数组security,其中security[i]是第i天执勤警卫的数量。日子从0开始编号。同时给......