class
mycirculardeque
(object):
def__init__
(self, k)
:# 長度為k時占用k+1的空間,多出來的空間用來區分isempty和isfull
# 首尾兩個指標相等的時候為empty,尾部+1等於首部的時候為full
self.q =[0
]*(k +1)
self.
len= k +
1 self.rear =
0 self.front =
0def
move_forward
(self, pos)
:return
(pos +1)
% self.
lendef
move_backward
(self, pos)
:return
(pos -1)
% self.
lendef
insertfront
(self, value):if
not self.isfull():
# 前端插入始終是先插入後移動,self.front始終指向多出來的那個坑
self.q[self.front]
= value
self.front = self.move_backward(self.front)
return
true
else
:return
false
definsertlast
(self, value):if
not self.isfull():
# 後端插入始終是先移動後插入,self.rear始終指向後端最後插入的元素
self.rear = self.move_forward(self.rear)
self.q[self.rear]
= value
return
true
else
:return
false
# 刪除只需要移動
defdeletefront
(self):if
not self.isempty():
self.front = self.move_forward(self.front)
return
true
else
:return
false
defdeletelast
(self):if
not self.isempty():
self.rear = self.move_backward(self.rear)
return
true
else
:return
false
defgetfront
(self):if
not self.isempty():
return self.q[self.move_forward(self.front)
]else
:return-1
defgetrear
(self):if
not self.isempty():
return self.q[self.rear]
else
:return-1
defisempty
(self)
:if self.front == self.rear:
return
true
else
:return
false
defisfull
(self)
:if self.move_forward(self.rear)
== self.front:
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()
leetcode專題訓練 棧和佇列
1 155.最小棧 設計乙個支援 push pop top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。解答 兩個棧,乙個維護最小值 2 150.逆波蘭表示式求值 根據 逆波蘭表示法,求...
Leetcode之數學計算法專題
1.pow x,n 2.sqrt x 3.divide two integers 4.multiply strings 5.add two numbers 三道數學題,分別用了分治法,二分查詢法和不標準的二分查詢法。第一題巧妙地運用了n除二的最終形態使n小於零的公式 half half x變成了1 ...
專題 單調佇列
單調佇列就是佇列中元素滿足單調性 入隊 從隊尾入隊,在入隊的時候刪掉隊尾比當前入隊的元素大 或小 的元素 出隊 出隊是直接把隊頭元素取出 poj2823 sliding window 滑動視窗 給定乙個長為n陣列以及乙個長為k的滑動視窗,視窗每個時刻向後移動一位,求出每個時刻視窗中數字的最大值和最小...