上次编辑到这里,代码来自缓存 点击恢复默认模板
class MyCircularDeque {
public:
MyCircularDeque(int k) {
}
bool insertFront(int value) {
}
bool insertLast(int value) {
}
bool deleteFront() {
}
bool deleteLast() {
}
int getFront() {
}
int getRear() {
}
bool isEmpty() {
}
bool isFull() {
}
};
/**
* Your MyCircularDeque object will be instantiated and called as such:
* MyCircularDeque* obj = new MyCircularDeque(k);
* bool param_1 = obj->insertFront(value);
* bool param_2 = obj->insertLast(value);
* bool param_3 = obj->deleteFront();
* bool param_4 = obj->deleteLast();
* int param_5 = obj->getFront();
* int param_6 = obj->getRear();
* bool param_7 = obj->isEmpty();
* bool param_8 = obj->isFull();
*/
python3 解法, 执行用时: 84 ms, 内存消耗: 15.8 MB, 提交时间: 2022-08-15 10:04:52
class Node:
__slots__ = 'prev', 'next', 'val'
def __init__(self, val):
self.prev = self.next = None
self.val = val
class MyCircularDeque:
def __init__(self, k: int):
self.head = self.tail = None
self.capacity = k
self.size = 0
def insertFront(self, value: int) -> bool:
if self.isFull():
return False
node = Node(value)
if self.isEmpty():
self.head = node
self.tail = node
else:
node.next = self.head
self.head.prev = node
self.head = node
self.size += 1
return True
def insertLast(self, value: int) -> bool:
if self.isFull():
return False
node = Node(value)
if self.isEmpty():
self.head = node
self.tail = node
else:
self.tail.next = node
node.prev = self.tail
self.tail = node
self.size += 1
return True
def deleteFront(self) -> bool:
if self.isEmpty():
return False
self.head = self.head.next
if self.head:
self.head.prev = None
self.size -= 1
return True
def deleteLast(self) -> bool:
if self.isEmpty():
return False
self.tail = self.tail.prev
if self.tail:
self.tail.next = None
self.size -= 1
return True
def getFront(self) -> int:
return -1 if self.isEmpty() else self.head.val
def getRear(self) -> int:
return -1 if self.isEmpty() else self.tail.val
def isEmpty(self) -> bool:
return self.size == 0
def isFull(self) -> bool:
return self.size == self.capacity
# Your MyCircularDeque object will be instantiated and called as such:
# obj = MyCircularDeque(k)
# param_1 = obj.insertFront(value)
# param_2 = obj.insertLast(value)
# param_3 = obj.deleteFront()
# param_4 = obj.deleteLast()
# param_5 = obj.getFront()
# param_6 = obj.getRear()
# param_7 = obj.isEmpty()
# param_8 = obj.isFull()
golang 解法, 执行用时: 20 ms, 内存消耗: 6.7 MB, 提交时间: 2022-08-15 10:04:34
type node struct {
prev, next *node
val int
}
type MyCircularDeque struct {
head, tail *node
capacity, size int
}
func Constructor(k int) MyCircularDeque {
return MyCircularDeque{capacity: k}
}
func (q *MyCircularDeque) InsertFront(value int) bool {
if q.IsFull() {
return false
}
node := &node{val: value}
if q.IsEmpty() {
q.head = node
q.tail = node
} else {
node.next = q.head
q.head.prev = node
q.head = node
}
q.size++
return true
}
func (q *MyCircularDeque) InsertLast(value int) bool {
if q.IsFull() {
return false
}
node := &node{val: value}
if q.IsEmpty() {
q.head = node
q.tail = node
} else {
q.tail.next = node
node.prev = q.tail
q.tail = node
}
q.size++
return true
}
func (q *MyCircularDeque) DeleteFront() bool {
if q.IsEmpty() {
return false
}
q.head = q.head.next
if q.head != nil {
q.head.prev = nil
}
q.size--
return true
}
func (q *MyCircularDeque) DeleteLast() bool {
if q.IsEmpty() {
return false
}
q.tail = q.tail.prev
if q.tail != nil {
q.tail.next = nil
}
q.size--
return true
}
func (q MyCircularDeque) GetFront() int {
if q.IsEmpty() {
return -1
}
return q.head.val
}
func (q MyCircularDeque) GetRear() int {
if q.IsEmpty() {
return -1
}
return q.tail.val
}
func (q MyCircularDeque) IsEmpty() bool {
return q.size == 0
}
func (q MyCircularDeque) IsFull() bool {
return q.size == q.capacity
}
/**
* Your MyCircularDeque object will be instantiated and called as such:
* obj := Constructor(k);
* param_1 := obj.InsertFront(value);
* param_2 := obj.InsertLast(value);
* param_3 := obj.DeleteFront();
* param_4 := obj.DeleteLast();
* param_5 := obj.GetFront();
* param_6 := obj.GetRear();
* param_7 := obj.IsEmpty();
* param_8 := obj.IsFull();
*/
golang 解法, 执行用时: 16 ms, 内存消耗: 6.6 MB, 提交时间: 2022-08-15 10:04:08
type MyCircularDeque struct {
front, rear int
elements []int
}
func Constructor(k int) MyCircularDeque {
return MyCircularDeque{elements: make([]int, k+1)}
}
func (q *MyCircularDeque) InsertFront(value int) bool {
if q.IsFull() {
return false
}
q.front = (q.front - 1 + len(q.elements)) % len(q.elements)
q.elements[q.front] = value
return true
}
func (q *MyCircularDeque) InsertLast(value int) bool {
if q.IsFull() {
return false
}
q.elements[q.rear] = value
q.rear = (q.rear + 1) % len(q.elements)
return true
}
func (q *MyCircularDeque) DeleteFront() bool {
if q.IsEmpty() {
return false
}
q.front = (q.front + 1) % len(q.elements)
return true
}
func (q *MyCircularDeque) DeleteLast() bool {
if q.IsEmpty() {
return false
}
q.rear = (q.rear - 1 + len(q.elements)) % len(q.elements)
return true
}
func (q MyCircularDeque) GetFront() int {
if q.IsEmpty() {
return -1
}
return q.elements[q.front]
}
func (q MyCircularDeque) GetRear() int {
if q.IsEmpty() {
return -1
}
return q.elements[(q.rear-1+len(q.elements))%len(q.elements)]
}
func (q MyCircularDeque) IsEmpty() bool {
return q.rear == q.front
}
func (q MyCircularDeque) IsFull() bool {
return (q.rear+1)%len(q.elements) == q.front
}
/**
* Your MyCircularDeque object will be instantiated and called as such:
* obj := Constructor(k);
* param_1 := obj.InsertFront(value);
* param_2 := obj.InsertLast(value);
* param_3 := obj.DeleteFront();
* param_4 := obj.DeleteLast();
* param_5 := obj.GetFront();
* param_6 := obj.GetRear();
* param_7 := obj.IsEmpty();
* param_8 := obj.IsFull();
*/
python3 解法, 执行用时: 68 ms, 内存消耗: 15.6 MB, 提交时间: 2022-08-15 10:03:18
class MyCircularDeque:
def __init__(self, k: int):
self.front = self.rear = 0
self.elements = [0] * (k + 1)
def insertFront(self, value: int) -> bool:
if self.isFull():
return False
self.front = (self.front - 1) % len(self.elements)
self.elements[self.front] = value
return True
def insertLast(self, value: int) -> bool:
if self.isFull():
return False
self.elements[self.rear] = value
self.rear = (self.rear + 1) % len(self.elements)
return True
def deleteFront(self) -> bool:
if self.isEmpty():
return False
self.front = (self.front + 1) % len(self.elements)
return True
def deleteLast(self) -> bool:
if self.isEmpty():
return False
self.rear = (self.rear - 1) % len(self.elements)
return True
def getFront(self) -> int:
return -1 if self.isEmpty() else self.elements[self.front]
def getRear(self) -> int:
return -1 if self.isEmpty() else self.elements[(self.rear - 1) % len(self.elements)]
def isEmpty(self) -> bool:
return self.rear == self.front
def isFull(self) -> bool:
return (self.rear + 1) % len(self.elements) == self.front
# Your MyCircularDeque object will be instantiated and called as such:
# obj = MyCircularDeque(k)
# param_1 = obj.insertFront(value)
# param_2 = obj.insertLast(value)
# param_3 = obj.deleteFront()
# param_4 = obj.deleteLast()
# param_5 = obj.getFront()
# param_6 = obj.getRear()
# param_7 = obj.isEmpty()
# param_8 = obj.isFull()