トピック
両端キューを設計して実装します。
実装では次の操作をサポートする必要があります。
- MyCircularDeque(k): コンストラクター、両端キューのサイズは k です。
- insertFront(): 両端キューの先頭に要素を追加します。操作が成功した場合は true を返します。
- insertLast():両端キューの末尾に要素を追加します。操作が成功した場合は true を返します。
- deleteFront():両端キューの先頭から要素を削除します。操作が成功した場合は true を返します。
- deleteLast(): 両端キューの末尾から要素を削除します。操作が成功した場合は true を返します。
- getFront():両端キューの先頭から要素を取得します。デキューが空の場合は、-1 が返されます。
- getRear():両端キューの最後の要素を取得します。デキューが空の場合は、-1 が返されます。
- isEmpty():両端キューが空かどうかを確認します。
- isFull(): 両端キューがいっぱいかどうかを確認します。
例
MyCircularDequecircularDeque = new MycircularDeque(3); // 容量サイズを 3 に設定します
circularDeque.insertLast(1); // true を返します
circularDeque.insertLast(2); // true を返す</span>
circularDeque.insertFront(3); // true を返す</span>circularDeque.deleteLast(); // true を返す</span>circularDeque.insertFront(4); // true を返す</span>circularDeque.getFront(); // 4 を返す</span>circularDeque.isFull(); // true を返しますcircularDeque.getRear(); // 2 を返します
circularDeque.insertFront(4); //すでにいっぱいの場合、 false を返します
ヒント
- すべての値は [1, 1000] の範囲内にあります
- 演算範囲は[1,1000]です。
- 組み込みの DEQUE ライブラリは使用しないでください。
正常に実行されるコード
class MyCircularDeque(object):
def __init__(self, k):
"""
Initialize your data structure here. Set the size of the deque to be k.
:type k: int
"""
self.capacity = k+1
self.start = self.rear = 0
self.queue = [float('inf')] * self.capacity
def insertFront(self, value):
if self.isFull():
return False
else:
if self.isEmpty() :
self.queue[self.start] = value
self.rear += 1
else:
index = (self.start -1 ) % self.capacity
self.queue[index] = value
self.start = index
return True
def insertLast(self, value):
if self.isFull():
return False
else:
self.queue[self.rear] = value
self.rear = (self.rear + 1) % self.capacity
return True
def deleteFront(self):
if self.isEmpty():
return False
else:
self.start = (self.start + 1) % self.capacity
return True
def deleteLast(self):
if self.isEmpty():
return False
else:
self.rear = (self.rear - 1) % self.capacity
self.queue[self.rear] = float('inf')
return True
def getFront(self):
if self.isEmpty():
return -1 #注意这里是-1 而不是False
else:
return self.queue[self.start]
def getRear(self):
if self.isEmpty():#要带扩号
print "empty"
return -1
index = (self.rear -1 ) % self.capacity
return self.queue[index]
def isEmpty(self):
if self.start == self.rear:
return True
else:
return False
def isFull(self):
if (self.rear + 1) % self.capacity == self.start:
return True
else:
return False
# 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()