当前位置:网站首页>LeetCode刷题笔记:622.设计循环队列
LeetCode刷题笔记:622.设计循环队列
2022-08-03 11:30:00 【LeBron Le】
1. 问题描述
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。
你的实现应该支持如下操作:
- MyCircularQueue(k): 构造器,设置队列长度为 k 。
- Front: 从队首获取元素。如果队列为空,返回 -1 。
- Rear: 获取队尾元素。如果队列为空,返回 -1 。
- enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
- deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
- isEmpty(): 检查循环队列是否为空。
- isFull(): 检查循环队列是否已满。
2. 解题思路
采用链表实现循环队列
定义循环队列的属性:
① head 为链表的头节点,队列的头节点。
② tail 为链表的尾节点,队列的尾节点。
③ capacity 为队列的容量,即队列可以存储的最大元素数量。
④ size 为队列当前元素的数量。
3. 代码实现
class MyCircularQueue {
private ListNode head;
private ListNode tail;
private int capacity;
private int size;
public MyCircularQueue(int k) {
capacity = k;
size = 0;
}
public boolean enQueue(int value) {
if (isFull()) {
return false;
}
ListNode node = new ListNode(value);
if (head == null) {
head = tail = node;
} else {
tail.next = node;
tail = node;
}
size++;
return true;
}
public boolean deQueue() {
if (isEmpty()) {
return false;
}
head = head.next;
size--;
return true;
}
public int Front() {
if (isEmpty()) {
return -1;
}
return head.val;
}
public int Rear() {
if (isEmpty()) {
return -1;
}
return tail.val;
}
public boolean isEmpty() {
if (size == 0) {
return true;
}
return false;
}
public boolean isFull() {
if (size == capacity) {
return true;
}
return false;
}
}
/** * Your MyCircularQueue object will be instantiated and called as such: * MyCircularQueue obj = new MyCircularQueue(k); * boolean param_1 = obj.enQueue(value); * boolean param_2 = obj.deQueue(); * int param_3 = obj.Front(); * int param_4 = obj.Rear(); * boolean param_5 = obj.isEmpty(); * boolean param_6 = obj.isFull(); */
- 时间复杂度:初始化和每项操作的时间复杂度均为O(1)。
- 空间复杂度:O(k),其中 k 为给定的队列元素数目。
边栏推荐
- Skills required to be a good architect: How to draw a system architecture that everyone will love?What's the secret?Come and open this article to see it!...
- How to use outside the PHP command in the container
- FR9811S6 SOT-23-6 23V, 2A Synchronous Step-Down DC/DC Converter
- Activiti产生的背景和作用
- 优维低代码:Provider 构件
- Why is the new earth blurred, in-depth analysis of white balls, viewing pictures, and downloading problems
- dataset数据集有哪些_数据集类型
- Binary search tree (search binary tree) simulation implementation (there is a recursive version)
- 永寿 永寿农特产品-苹果
- 【无标题】函数,对象,方法的区别
猜你喜欢
LeetCode 899 Ordered queue [lexicographical order] HERODING's LeetCode road
【Star项目】小帽飞机大战(九)
The way of programmer architecture practice: how to design a sustainable evolution system architecture?
html网页如何获取后台数据库的数据(html + ajax + php + mysql)
Lease recovery system based on PHP7.2+MySQL5.7
【MySQL】数据库进阶之索引内容详解(上篇 索引分类与操作)
asdn涨薪技术之apifox+Jenkins如何玩转接口自动化测试
What is the relationship between The Matrix and 6G?
Babbitt | Metaverse daily must-read: Players leave, platforms are shut down, and the digital collection market is gradually cooling down. Where is the future of the industry?...
redis基础知识总结——数据类型(字符串,列表,集合,哈希,集合)
随机推荐
面试官:SOA 和微服务的区别?这回终于搞清楚了!
MapReduce中ETL数据清洗案例
viewstub 的详细用法_pageinfo用法
dataset数据集有哪些_数据集类型
"Global Digital Economy Conference" landed in N World, Rongyun provides communication cloud service support
FR9811S6 SOT-23-6 23V, 2A Synchronous Step-Down DC/DC Converter
RICON:NER SOTA 又来!
C#/VB.NET 从PDF中提取表格
MySQL之json数据操作
build --repot
opencv学习—VideoCapture 类基础知识「建议收藏」
Android 技术面试准备(含面试题及答案)
build --repot
卷起来!阿里高工携18位高级架构师耗时57天整合的1658页面试总结
[Wrong title] Circuit maintenance
优维低代码:Provider 构件
【一起学Rust】Rust学习前准备——注释和格式化输出
字符串本地化和消息字典(二)
【TypeScript】Why choose TypeScript?
Dry goods!A highly structured and sparse linear transformation called Deformable Butterfly (DeBut)