问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 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)相关推荐

  1. leetcode:641. 设计循环双端队列

    641. 设计循环双端队列 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/design-circular-deque/ 设计实现双端队列. 实现 M ...

  2. LeetCode 641. 设计循环双端队列

    文章目录 1. 题目信息 2. 解题 1. 题目信息 设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k. insertFront(): ...

  3. leetcode 622. Design Circular Queue | 641. 设计循环双端队列(Java)

    题目 https://leetcode.com/problems/design-circular-deque/ 题解 相关问题:leetcode 622. Design Circular Queue ...

  4. LeetCode实战:设计循环双端队列

    题目英文 Design your implementation of the circular double-ended queue (deque). Your implementation shou ...

  5. 《恋上数据结构第1季》队列、双端队列、循环队列、循环双端队列

    队列(Queue) 队列 Queue 队列的接口设计 队列源码 双端队列 Deque 双端队列接口设计 双端队列源码 循环队列 Circle Queue 循环队列实现 索引映射封装 循环队列 – %运 ...

  6. 卷进大厂系列之LeetCode刷题笔记:设计链表(中等)

    学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下 ...

  7. C#LeetCode刷题之#622-设计循环队列​​​​​​​(Design Circular Queue)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4126 访问. 设计你的循环队列实现. 循环队列是一种线性数据结构 ...

  8. C#LeetCode刷题之#706-设计哈希映射(Design HashMap)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4116 访问. 不使用任何内建的哈希表库设计一个哈希映射 具体地说 ...

  9. C#LeetCode刷题之#705-设计哈希集合​​​​​​​(Design HashSet)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4114 访问. 不使用任何内建的哈希表库设计一个哈希集合 具体地说 ...

最新文章

  1. oracle联机和脱机什么意思,Oracle 表空间联机(online)与脱机(offline)
  2. poj1664(放苹果)
  3. 开学典礼上,施一公寄语:西湖大学绝不允许任何形式的学术不端!
  4. centos7.x redhat7.x 升级openssh8.7
  5. 如何绘制逻辑图 — 6.要素的属性:内聚与解耦
  6. Thinkphp5 同时连接两个库
  7. 在矩池云上复现 PaddleGAN 照片转油画风格教程
  8. 使用Emit的时候类型XXX尚未完成
  9. Careercup - Facebook面试题 - 4907555595747328
  10. social-engineer-toolkit搭建-网站克隆钓鱼
  11. 华东师范大学2019年数学分析考研试题
  12. 计算机内存不够玩不了游戏,电脑玩游戏内存不够怎么解决
  13. Unity简单爆炸效果的实现
  14. 可靠性工程师是做什么的?需要哪些能力?
  15. 计算机一级证件照尺寸,照相馆不会告诉你的哪些事:常用证件照尺寸汇总
  16. iPhone/iPad使用A-Shell免越狱运行SQLmap等渗透工具【持续更新】【A-Shell使用】【渗透工具】【待完善】
  17. 2.ipv6苹果上线 新网域名不支持AAAA 域名DNS解析AAAA -----如何将DNS从新网转到DNSPod?
  18. Audio Unit(三):Audio Unit Development Fundamentals
  19. 《神经科学:探索脑》学习笔记(第19章 脑的节律)
  20. ext ajax同步加载数据,ext 的loadmask 与ajax的同步请求水火不容

热门文章

  1. CSS——id 和 class 选择器
  2. HTML5 css链接添加不同的样式
  3. 【java web】java执行预编译Groovy脚本
  4. 接口目标 java 1614953528
  5. 演练 动态数组存储学生对象 并且实现遍历 0119
  6. 03 使用T-SQL语句实现数据的添加、更新、删除测试分析 1214
  7. dj鲜生-37-order应用-模型类创建
  8. 爬虫-xpath的用法强化
  9. linux free 命令中buffers、cached以及-/+ buffers/cache解析
  10. 昨天,A站受黑客攻击千万条用户数据外泄,量子加密能救得了吗?