leetcode專題之佇列 設計迴圈雙端佇列

2021-10-23 17:42:44 字數 2418 閱讀 7196

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的滑動視窗,視窗每個時刻向後移動一位,求出每個時刻視窗中數字的最大值和最小...