当前位置:网站首页>力扣 622. 设计循环队列
力扣 622. 设计循环队列
2022-08-02 17:57: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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/design-circular-queue
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1:数组模拟
多申请一个数组空间,用作虚拟结点。
Java实现
class MyCircularQueue {
int[] arr;
int l = 0, r = 0, n;
public MyCircularQueue(int k) {
arr = new int[k + 1];
n = arr.length;
}
public boolean enQueue(int value) {
l = l % n;
r = r % n;
if ((r + 1) % n == l) return false;
arr[++r % n] = value;
return true;
}
public boolean deQueue() {
l = l % n;
r = r % n;
if (l == r) return false;
l++;
return true;
}
public int Front() {
l = l % n;
r = r % n;
if (l == r) return -1;
return arr[(l + 1) % n];
}
public int Rear() {
l = l % n;
r = r % n;
if (l == r) return -1;
return arr[r];
}
public boolean isEmpty() {
l = l % n;
r = r % n;
if (l == r) return true;
return false;
}
public boolean isFull() {
l = l % n;
r = r % n;
if ((r + 1) % n == l) return true;
return false;
}
}

边栏推荐
- Mysql和Redis如何保证数据一致性
- golang刷leetcode滑动窗口(9) 颜色分类
- LeetCode 2333. 最小差值平方和(贪心)
- golang刷leetcode 经典(1) LRU缓存机制
- 手机银行体验性测试:如何获取用户真实感受
- Go 语言快速入门指南:第二篇 变量与常量
- 基于HDF的LED驱动程序开发(1)
- 千万级QPS下服务如何才能平滑启动
- cache2go-源码阅读
- Mini Program Graduation Works WeChat Gymnasium Reservation Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template
猜你喜欢

VSTO踩坑记录(1)- 从零开始开发outlook插件

多聚体/壳聚糖修饰白蛋白纳米球/mPEG-HSA聚乙二醇人血清白蛋白纳米球的制备与研究

MySQL基本语法

Data Governance: The Evolution of Data Integration and Application Patterns

How can services start smoothly under tens of millions of QPS

Mini Program Graduation Works WeChat Gymnasium Reservation Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template

租房小程序自动定位城市

Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works (7) Mid-term Inspection Report

如何构建准实时数仓?

技术人生 | 如何设定业务目标
随机推荐
IReport常见问题及处理方法
搭建属于自己的知识库(Wikijs)
Cpolar application example of data acquisition equipment
golang刷leetcode 经典(5)设计哈希集合
今年上半年,我国公路建设总体形势持续向好
How can services start smoothly under tens of millions of QPS
How Tencent architects explained: The principle of Redis high-performance communication (essential version)
记一次 .NET 某工控自动化控制系统 卡死分析
LeetCode 2353. 设计食物评分系统(sortedcontainers)
MySQL LIKE – 语法和用法示例教程
KunlunBase 1.0 发布了!
故障分析 | 一条 SELECT 语句跑崩了 MySQL ,怎么回事?
技术人生 | 如何画业务大图
Technical life | How to draw a big picture of business
2021年下半年软件设计师上午真题
DevOps之代码检查
IDEA相关配置(特别完整)看完此篇就将所有的IDEA的相关配置都配置好了、设置鼠标滚轮修改字体大小、设置鼠标悬浮提示、设置主题、设置窗体及菜单的字体及字体大小、设置编辑区主题、通过插件更换主题
MySQL表的约束
vulnhub W34kn3ss: 1
redis总结_多级缓存