C#LeetCode刷题之#641-设计循环双端队列(Design Circular Deque)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4132 访问。
设计实现双端队列。
你的实现需要支持以下操作:
MyCircularDeque(k):构造函数,双端队列的大小为k。
insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。
insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。
deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。
deleteLast():从双端队列尾部删除一个元素。如果操作成功返回 true。
getFront():从双端队列头部获得一个元素。如果双端队列为空,返回 -1。
getRear():获得双端队列的最后一个元素。 如果双端队列为空,返回 -1。
isEmpty():检查双端队列是否为空。
isFull():检查双端队列是否满了。
MyCircularDeque circularDeque = new MyCircularDeque(3); // 设置容量大小为3
circularDeque.insertLast(1); // 返回 true
circularDeque.insertLast(2); // 返回 true
circularDeque.insertFront(3); // 返回 true
circularDeque.insertFront(4); // 已经满了,返回 false
circularDeque.getRear(); // 返回 32 -此处应为2,LeetCode官方翻译错误,2018-11-08
circularDeque.isFull(); // 返回 true
circularDeque.deleteLast(); // 返回 true
circularDeque.insertFront(4); // 返回 true
circularDeque.getFront(); // 返回 4
提示:
- 所有值的范围为 [1, 1000]
- 操作次数的范围为 [1, 1000]
- 请不要使用内置的双端队列库。
Design your implementation of the circular double-ended queue (deque).
Your implementation should support following operations:
MyCircularDeque(k): Constructor, set the size of the deque to be k.
insertFront(): Adds an item at the front of Deque. Return true if the operation is successful.
insertLast(): Adds an item at the rear of Deque. Return true if the operation is successful.
deleteFront(): Deletes an item from the front of Deque. Return true if the operation is successful.
deleteLast(): Deletes an item from the rear of Deque. Return true if the operation is successful.
getFront(): Gets the front item from the Deque. If the deque is empty, return -1.
getRear(): Gets the last item from Deque. If the deque is empty, return -1.
isEmpty(): Checks whether Deque is empty or not.
isFull(): Checks whether Deque is full or not.
MyCircularDeque circularDeque = new MycircularDeque(3); // set the size to be 3
circularDeque.insertLast(1); // return true
circularDeque.insertLast(2); // return true
circularDeque.insertFront(3); // return true
circularDeque.insertFront(4); // return false, the queue is full
circularDeque.getRear(); // return 32 -此处应为2,LeetCode官方翻译错误,2018-11-08
circularDeque.isFull(); // return true
circularDeque.deleteLast(); // return true
circularDeque.insertFront(4); // return true
circularDeque.getFront(); // return 4
Note:
- All values will be in the range of [1, 1000].
- The number of operations will be in the range of [1, 1000].
- Please do not use the built-in Deque library.
示例
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4132 访问。
public class Program {public static void Main(string[] args) {var circularDeque = new MyCircularDeque(5);Console.WriteLine(circularDeque.InsertFront(7));Console.WriteLine(circularDeque.InsertLast(0));Console.WriteLine(circularDeque.InsertLast(3));Console.WriteLine(circularDeque.InsertFront(9));Console.WriteLine(circularDeque.DeleteLast());Console.WriteLine(circularDeque.GetRear());Console.WriteLine();var circularDeque2 = new MyCircularDeque2(5);Console.WriteLine(circularDeque2.InsertFront(1));Console.WriteLine(circularDeque2.InsertLast(2));Console.WriteLine(circularDeque2.InsertLast(3));Console.WriteLine(circularDeque2.InsertFront(4));Console.WriteLine(circularDeque2.GetRear());Console.WriteLine(circularDeque2.IsFull());Console.WriteLine(circularDeque2.DeleteLast());Console.WriteLine(circularDeque2.GetRear());Console.WriteLine(circularDeque2.InsertFront(4));Console.WriteLine(circularDeque2.GetFront());Console.ReadKey();}public class MyCircularDeque {private int _frontIndex = -1;private int _rearIndex = -1;private int _count = 0;private List<int> _frontList = null;private List<int> _rearList = null;public MyCircularDeque(int k) {//构造函数,双端队列的大小为k_count = k;_frontList = new List<int>();_rearList = new List<int>();}public bool InsertFront(int value) {//将一个元素添加到双端队列头部。 如果操作成功返回 trueif(_count == 0 || _frontIndex + _rearIndex == _count - 2) return false;_frontIndex++;_frontList.Add(value);return true;}public bool InsertLast(int value) {//将一个元素添加到双端队列尾部。如果操作成功返回 trueif(_count == 0 || _frontIndex + _rearIndex == _count - 2) return false;_rearIndex++;_rearList.Insert(0, value);return true;}public bool DeleteFront() {//从双端队列头部删除一个元素。 如果操作成功返回 trueif(_count == 0 || _frontIndex + _rearIndex == -2) return false;if(_frontIndex == -1) {_rearList.RemoveAt(_rearIndex);_rearIndex--;return true;}_frontList.RemoveAt(_frontIndex);_frontIndex--;return true;}public bool DeleteLast() {//从双端队列尾部删除一个元素。如果操作成功返回 trueif(_count == 0 || _frontIndex + _rearIndex == -2) return false;if(_rearIndex == -1) {_frontIndex--;_frontList.RemoveAt(0);return true;}_rearIndex--;_rearList.RemoveAt(0);return true;}public int GetFront() {//从双端队列头部获得一个元素。如果双端队列为空,返回 -1if(_count == 0 || _frontIndex + _rearIndex == -2) return -1;if(_frontIndex == -1) {return _rearList[_rearIndex];}return _frontList[_frontIndex];}public int GetRear() {//获得双端队列的最后一个元素。 如果双端队列为空,返回 -1if(_count == 0 || _frontIndex + _rearIndex == -2) return -1;if(_rearIndex == -1) {return _frontList[0];}return _rearList[0];}public bool IsEmpty() {//检查双端队列是否为空return _frontIndex + _rearIndex == -2;}public bool IsFull() {//检查双端队列是否满了return _frontIndex + _rearIndex == _count - 2;}}public class MyCircularDeque2 {private List<int> _list = null;private int _count = 0;public MyCircularDeque2(int k) {_list = new List<int>();_count = k;}public bool InsertFront(int value) {if(_count > _list.Count) {_list.Insert(0, value);return true;}return false;}public bool InsertLast(int value) {if(_count > _list.Count) {_list.Add(value);return true;}return false;}public bool DeleteFront() {if(_list.Count > 0) {_list.RemoveAt(0);return true;}return false;}public bool DeleteLast() {if(_list.Count > 0) {_list.RemoveAt(_list.Count - 1);return true;}return false;}public int GetFront() {return _list.Count > 0 ? _list[0] : -1;}public int GetRear() {return _list.Count > 0 ? _list[_list.Count - 1] : -1;}public bool IsEmpty() {return _list.Count <= 0;}public bool IsFull() {return _list.Count == _count;}}}
以上给出2种算法实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4132 访问。
True
True
True
True
True
0True
True
True
True
3
False
True
2
True
4
分析:
显而易见,以上2种算法中所有的方法的时间复杂度均为: 。
C#LeetCode刷题之#641-设计循环双端队列(Design Circular Deque)相关推荐
- leetcode:641. 设计循环双端队列
641. 设计循环双端队列 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/design-circular-deque/ 设计实现双端队列. 实现 M ...
- LeetCode 641. 设计循环双端队列
文章目录 1. 题目信息 2. 解题 1. 题目信息 设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k. insertFront(): ...
- leetcode 622. Design Circular Queue | 641. 设计循环双端队列(Java)
题目 https://leetcode.com/problems/design-circular-deque/ 题解 相关问题:leetcode 622. Design Circular Queue ...
- LeetCode实战:设计循环双端队列
题目英文 Design your implementation of the circular double-ended queue (deque). Your implementation shou ...
- 《恋上数据结构第1季》队列、双端队列、循环队列、循环双端队列
队列(Queue) 队列 Queue 队列的接口设计 队列源码 双端队列 Deque 双端队列接口设计 双端队列源码 循环队列 Circle Queue 循环队列实现 索引映射封装 循环队列 – %运 ...
- 卷进大厂系列之LeetCode刷题笔记:设计链表(中等)
学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下 ...
- C#LeetCode刷题之#622-设计循环队列(Design Circular Queue)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4126 访问. 设计你的循环队列实现. 循环队列是一种线性数据结构 ...
- C#LeetCode刷题之#706-设计哈希映射(Design HashMap)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4116 访问. 不使用任何内建的哈希表库设计一个哈希映射 具体地说 ...
- C#LeetCode刷题之#705-设计哈希集合(Design HashSet)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4114 访问. 不使用任何内建的哈希表库设计一个哈希集合 具体地说 ...
最新文章
- oracle联机和脱机什么意思,Oracle 表空间联机(online)与脱机(offline)
- poj1664(放苹果)
- 开学典礼上,施一公寄语:西湖大学绝不允许任何形式的学术不端!
- centos7.x redhat7.x 升级openssh8.7
- 如何绘制逻辑图 — 6.要素的属性:内聚与解耦
- Thinkphp5 同时连接两个库
- 在矩池云上复现 PaddleGAN 照片转油画风格教程
- 使用Emit的时候类型XXX尚未完成
- Careercup - Facebook面试题 - 4907555595747328
- social-engineer-toolkit搭建-网站克隆钓鱼
- 华东师范大学2019年数学分析考研试题
- 计算机内存不够玩不了游戏,电脑玩游戏内存不够怎么解决
- Unity简单爆炸效果的实现
- 可靠性工程师是做什么的?需要哪些能力?
- 计算机一级证件照尺寸,照相馆不会告诉你的哪些事:常用证件照尺寸汇总
- iPhone/iPad使用A-Shell免越狱运行SQLmap等渗透工具【持续更新】【A-Shell使用】【渗透工具】【待完善】
- 2.ipv6苹果上线 新网域名不支持AAAA 域名DNS解析AAAA -----如何将DNS从新网转到DNSPod?
- Audio Unit(三):Audio Unit Development Fundamentals
- 《神经科学:探索脑》学习笔记(第19章 脑的节律)
- ext ajax同步加载数据,ext 的loadmask 与ajax的同步请求水火不容