1.题目:设计循环双端队列
你的实现需要支持以下操作:
- MyCircularDeque(k):构造函数,双端队列的大小为k。
- insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。
- insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。
- deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。
- deleteLast():从双端队列尾部删除一个元素。如果操作成功返回 true。
- getFront():从双端队列头部获得一个元素。如果双端队列为空,返回 -1。
- getRear():获得双端队列的最后一个元素。 如果双端队列为空,返回 -1。
- isEmpty():检查双端队列是否为空。
- isFull():检查双端队列是否满了。
2.非指针的菜鸡写法(丝毫没有体现循环的思想)
class MyCircularDeque:
def __init__(self, k: int):
self.l=k
self.q=[]
self.c=0
def insertFront(self, value: int) -> bool:
if self.c<self.l :
self.q.insert(0,value)
self.c+=1
return True
else :
return False
def insertLast(self, value: int) -> bool:
if self.c < self.l:
self.q.append(value)
self.c+=1
return True
else:
return False
def deleteFront(self) -> bool:
self.c-=1 if self.c >0 else 0
return self.q and (self.q.pop(0) or True)
def deleteLast(self) -> bool:
self.c-=1 if self.c >0 else 0
return self.q and (self.q.pop() or True)
def getFront(self) -> int:
return self.q[0] if self.q else -1
def getRear(self) -> int:
return self.q[-1] if self.q else -1
def isEmpty(self) -> bool:
return self.c == 0
def isFull(self) -> bool:
return self.c ==self.l
class MyCircularDeque:
def __init__(self, k: int):
self.max_size = k # 标记队列最大长度
self.cur_len = 0 # 标记当前队列长度
self.queue = [0 for _ in range(k)]
self.phead, self.prear = 0, 0
def insertFront(self, value: int) -> bool:
if self.cur_len == self.max_size: # 队满
return False
self.phead = (self.phead - 1) % self.max_size
self.queue[self.phead] = value
self.cur_len += 1
return True
def insertLast(self, value: int) -> bool:
if self.cur_len == self.max_size:
return False
self.queue[self.prear] = value
self.prear = (self.prear + 1) % self.max_n
self.cur_len += 1
return True
def deleteFront(self) -> bool:
if not self.cur_len: # 队空
return False
self.phead = (self.phead + 1) % self.max_size
self.cur_len -= 1
return True
def deleteLast(self) -> bool:
if not self.cur_len:
return False
self.prear = (self.prear - 1) % self.max_size
self.cur_len -= 1
return True
def getFront(self) -> int:
if not self.cur_len:
return -1
return self.queue[self.phead]
def getRear(self) -> int:
if not self.cur_len:
return -1
return self.queue[self.prear-1]
def isEmpty(self) -> bool:
return not self.cur_len
def isFull(self) -> bool:
return self.cur_len == self.max_size
附:数组实现的循环双端队列
链接:https://leetcode-cn.com/problems/design-circular-deque/solution/shu-zu-shi-xian-de-xun-huan-shuang-duan-dui-lie-by/