本文主要是介绍数据结构与算法:第六周作业二:641. 设计循环双端队列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
链接:https://leetcode-cn.com/problems/design-circular-deque/
解题思路:
用两个指针,记录头和尾。长度为k时占用k+1的空间,多出来的空间用来区分isEmpty和isFull。
头指针的特点:指向头中第一个空的地方。添加元素时,先添加后移动。
尾指针的特点:指向最后一个元素:添加元素时,先移动后添加。删除队尾或对头的元素:移动指针。
代码
class MyCircularDeque:def __init__(self, k: int):self.q = [0] * (k + 1)self.len = k + 1self.rear = 0self.front = 0def move_forward(self,pos):return (pos+1)%self.lendef move_backward(self,pos):return (pos-1)%self.len def insertFront(self, value: int) -> bool:if self.isFull():return Falseelse:self.q[self.front]=valueself.front=self.move_backward(self.front)def insertLast(self, value: int) -> bool:if self.isFull():return Falseelse:self.rear=self.move_forward(self.rear)self.q[self.rear]=valuereturn Truedef deleteFront(self) -> bool:if self.isEmpty():return Falseelse:self.front=self.move_forward(self.front)def deleteLast(self) -> bool:if self.isEmpty():return Falseelse:self.rear=self.move_backward(self.rear)return Truedef getFront(self) -> int:if self.isEmpty():return -1else:return self.q[self.move_forward(self.front)]def getRear(self) -> int:if self.isEmpty():return -1else:return self.q[self.rear]def isEmpty(self) -> bool:if self.rear==self.front:return Trueelse:return Falsedef isFull(self) -> bool:if self.move_forward(self.rear) == self.front:return Trueelse:return False
这篇关于数据结构与算法:第六周作业二:641. 设计循环双端队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!