03-3.2.4 双端队列

  • 👋 Hi, I'm @Beast Cheng
  • 👀 I'm interested in photography, hiking, landscape...
  • 🌱 I'm currently learning python, javascript, kotlin...
  • 📫 How to reach me --> 458290771@qq.com

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻

此外,《程序员必备技能》专栏和《程序员必备工具》专栏(该专栏暂未开设)日后会逐步更新,感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀

谢谢大家!🙏

定义

只允许从两端插入、两端删除 的线性表

如果只使用其中的一端的插入、删除操作,则双端队列的效果等同于栈

从而可以引申出另外两种特殊的双端队列

  • 输出受限的双端队列:只允许从两端插入、一端删除
  • 输入受限的双端队列:只允许从一端插入、两端删除

考点:判断输出序列的合法性

题目:如果数据元素输入序列是1,2,3,4,则哪些输出序列是合法的,哪些是非法的?

首先知道这些输入序列一共有 A 4 4 = 4 ! = 24 A_{4}^{4}=4!=24 A44=4!=24种可能性

使用卡特兰数可以计算出一共有14种合法的出栈序列: 1 n + 1 C n 2 n = 1 4 + 1 C 4 8 = 14 \frac{1}{n+1}C_{n}^{2n}=\frac{1}{4+1}C_{4}^{8}=14 n+11Cn2n=4+11C48=14
卡特兰数的公式还是需要记住的, 不需要证明, 但是要会使用

再看一下输入受限的双端队列输入受限的双端队列


需要记住的是栈中合法的序列, 双端队列中也一定合法


这种题目一般在选择题中出现

像这道题目, 输入顺序是1, 2, 3, 4, 那么在3之前, 1和2肯定已经输入进去了, 然后就可以看给你的选项中, 1和2是怎么排列的。

  • 输出受限 的队列中, 因为只能从右边出, 如果给你的序列是1在2之前, 那么肯定是1要在右, 2要在左, 接下来要做的就是如何利用两端插入拼凑出你要的输出顺序
  • 输入受限的队列中,由于只能从一端输入,在一个元素出栈之前,其他的序号较小的元素就已经可以确定他们在队列里面的相对位置,接下来就只要验证,能不能根据左右两边的删除操作来拼凑出后续的这些输出序列
相关推荐
化学在逃硬闯CS36 分钟前
【Leetcode热题100】108.将有序数组转换为二叉搜索树
数据结构·c++·算法·leetcode
追随者永远是胜利者37 分钟前
(LeetCode-Hot100)5. 最长回文子串
java·算法·leetcode·职场和发展·go
强子感冒了38 分钟前
JavaScript 零基础入门笔记:核心概念与语法详解
开发语言·javascript·笔记
tankeven40 分钟前
HJ86 求最大连续bit数
c++·算法
ValhallaCoder43 分钟前
hot100-回溯II
数据结构·python·算法·回溯
马猴烧酒.43 分钟前
【面试八股|RabbitMQ】RabbitMQ常见面试题详解笔记
笔记·面试·rabbitmq
追随者永远是胜利者1 小时前
(LeetCode-Hot100)19. 删除链表的倒数第 N 个结点
java·算法·leetcode·链表·go
就不掉头发1 小时前
动态规划算法 --积小流以成江海
算法·动态规划
坚持就完事了1 小时前
Java实现数据结构中的链表
java·数据结构·链表
写代码的小球1 小时前
C++ 标准库 <numbers>
开发语言·c++·算法