【每日一题】641. 设计循环双端队列

该博客探讨了如何设计一个循环双端队列,要求除构造函数外的操作复杂度为 O(1)。提出了数组和链表两种实现方式,数组实现通过调整数组大小和使用坐标转换来处理边界问题,链表实现则通过定义 Node 类和双向链表简化操作。文中强调了在处理下标自增和自减时的策略,并指出链表实现无需额外的下标转换。
摘要由CSDN通过智能技术生成

641. 设计循环双端队列

数据结构模拟题

一个基本的实现,需要满足除构造函数以外复杂度为 O(k) 以外,其余操作均为 O(1)。

常规实现包含两种方式:数组实现 与 链表实现。

其中数组实现可以利用调用次数较小,开成调用次数 3 倍大小,然后从中间开始往两边存储,这样做就不用考虑下标边的界问题;而更为常规的解法是构造一个与限定空间 k 等大的数组,使用两下标并配合坐标转换来做,对于下标自增操作而言,只需要进行「加一取模」即可,而对于下标自减操作,由于考虑负值问题,需要进行「增加限定空间偏移后,进行减一再取模」。

链表实现则无须考虑额外的下标转换问题,但需要额外定义类。

使用 cnt 记录当前队列元素大小,使用 k 记录初始化时指定的空间大小。
在这里插入图片描述

  • 数组

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值