Day13

本文介绍了如何使用单调队列优化滑动窗口问题,如LC239中的最大值查找,并探讨了如何用队列实现栈以及栈和队列在LeetCode问题中的角色,还涉及了栈内存分布的特点。
摘要由CSDN通过智能技术生成

第十三天 栈和队列part03

LC239滑动窗口最大值(未掌握

  1. 暴力解法:使用大根堆,每次加入一个end数据删除一个start数据,随后start++,end++,但是会超时
  2. 代码
    在这里插入图片描述
  3. 使用单调队列:
    • 队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。
      • 滑动窗口最大值:单调队列的队头值
      • 可能成为窗口中的最大值(主要解决如何弹出元素的问题,原本的解决方案中往往会超时):
        • 入队元素大于队尾元素,队尾元素出队直到队尾元素小于等于入队元素,否则入队元素队尾入队
        • 移除元素:只有当移除的元素等于队头元素才移除元素
    • 注意:未指定queue的类型的时候默认使用Deque
      在这里插入图片描述
  4. 代码
    在这里插入图片描述

LC347前K个高频元素(超时10min)

  1. 思路:利用HashMap统计词频,利用Set获取key和PriorityQueue构建大根堆根据词频排序
    • PriorityQueue的构建不是很熟练:new Comparator<>(){public int compare(){}}
    • 获取HashMap的key集:Set set = map.keySet()
  2. 代码:
    在这里插入图片描述

栈和队列的总结

  1. 面试题:栈里面的元素在内存中是连续分布的吗
    • 栈是容器适配器,底层容器使用不同的容器,导致栈内数据在内存中不一定是连续分布的。
      • 栈,队列不归类为容器,往往被归类为容器适配器。栈的底层实现可以是 vector,deque,list 都可以,主要就是数组和链表的底层实现。
    • 缺省情况下,默认底层容器是deque,deque在内存中的数据分布是不连续的
  2. 经典未掌握题目
    • 用队列实现栈:一个栈用来存放元素,一个元素用来备份元素
    • 括号匹配:使用一个栈的简洁写法,遇见左括号直接入栈右括号,遇见右括号直接出栈对应右括号
    • 中缀后缀表达式求值
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值