当前位置:网站首页>LeetCode中等题之设计循环队列
LeetCode中等题之设计循环队列
2022-08-04 09:15:00 【·星辰大海】
题目
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。
你的实现应该支持如下操作:
MyCircularQueue(k): 构造器,设置队列长度为 k 。
Front: 从队首获取元素。如果队列为空,返回 -1 。
Rear: 获取队尾元素。如果队列为空,返回 -1 。
enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
isEmpty(): 检查循环队列是否为空。
isFull(): 检查循环队列是否已满。
示例:
MyCircularQueue circularQueue = new MyCircularQueue(3); // 设置长度为 3
circularQueue.enQueue(1); // 返回 true
circularQueue.enQueue(2); // 返回 true
circularQueue.enQueue(3); // 返回 true
circularQueue.enQueue(4); // 返回 false,队列已满
circularQueue.Rear(); // 返回 3
circularQueue.isFull(); // 返回 true
circularQueue.deQueue(); // 返回 true
circularQueue.enQueue(4); // 返回 true
circularQueue.Rear(); // 返回 4
提示:
所有的值都在 0 至 1000 的范围内;
操作数将在 1 至 1000 的范围内;
请不要使用内置的队列库。
来源:力扣(LeetCode)
解题思路
循环队列的设计有好几种方式,可以采用留下一个空白位置的方法来判断队列的满或者空也可以使用队列长度计数的方法,还有队列的操作记录法。rear和front指针也可以有好多种位置关系,在这里我们采用rear=front=0开始,判断队列的满和空采用队列操作记录的方法。
class MyCircularQueue:
def __init__(self, k: int):
self.k=k
self.Queue=[None]*k
self.rear,self.front,self.flag=0,0,False
def enQueue(self, value: int) -> bool:
if self.isFull():
return False
self.Queue[self.rear]=value
self.rear=(self.rear+1)%self.k
self.flag=True
return True
def deQueue(self) -> bool:
if self.isEmpty():
return False
self.front=(self.front+1)%self.k
self.flag=False
return True
def Front(self) -> int:
return -1 if self.isEmpty() else self.Queue[self.front]
def Rear(self) -> int:
return -1 if self.isEmpty() else self.Queue[(self.rear+self.k-1)%self.k]
def isEmpty(self) -> bool:
return True if self.front==self.rear and not self.flag else False
def isFull(self) -> bool:
return True if self.front==self.rear and self.flag else False
# Your MyCircularQueue object will be instantiated and called as such:
# obj = MyCircularQueue(k)
# param_1 = obj.enQueue(value)
# param_2 = obj.deQueue()
# param_3 = obj.Front()
# param_4 = obj.Rear()
# param_5 = obj.isEmpty()
# param_6 = obj.isFull()

边栏推荐
- yuv420sp转jpg
- 如何从PG导入数据到kingbaseES
- Shared_preload_libraries导致很多语法不支持
- Quick tips for getting out of a single
- Detailed explanation of NAT/NAPT address translation (internal and external network communication) technology [Huawei eNSP]
- 【正点原子STM32连载】第一章 本书学习方法 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
- leetcode单调栈经典例题——最大矩形
- 学会 Arthas,让你 3 年经验掌握 5 年功力
- oracle sql 多表查询
- 云函数实现网站自动化签到配置详解【Web函数/Nodejs/cookie】
猜你喜欢

Fiddler(二)-手机抓包502错误解决方法

leetcode单调栈经典例题——最大矩形

抬升市场投资情绪,若羽臣是否还需“自身硬”?

张朝阳对话俞敏洪:谈宇宙、谈焦虑、谈创业、谈退休、谈人生

加降息与BTC流动性事件策略研究
![No module named 'flask_misaka' has been resolved [BUG solution]](/img/cc/e379d23a41330d2335dd192e16e821.png)
No module named 'flask_misaka' has been resolved [BUG solution]

TiCDC同步延迟问题处理

已解决No module named ‘flask_misaka‘【BUG解决】

Implementation of redis distributed lock

Post-94 Byte P7 posted the salary slip: It's really good to make up for this...
随机推荐
How Oracle for current library or certain library data on the same server number?
有了这篇 Kubernetes 的介绍,它的原理秒懂!
户外徒步旅行
注意力机制
他97年的,我既然卷不过他...
四大网络攻击常见手段及防护
yuv420sp转jpg
去掉js代码文件所有注释
获取cpu的核数
PD 源码分析- Checker: region 健康卫士
抬升市场投资情绪,若羽臣是否还需“自身硬”?
低代码应用开发的五大好处
MindSpore:Ascend运行出现问题
Shared_preload_libraries导致很多语法不支持
leetcode二叉树系列(二叉搜索树篇)
Grafana9.0发布,Prometheus和Loki查询生成器、全新导航、热图面板等新功能!
VRRP + MSTP configuration, huawei eNSP experiment 】 【
It is found that several WRH tables are locked, what should I do?
Explanation of spark operator
【无标题】