JZ59 II 佇列的最大值

2021-10-09 10:53:05 字數 1668 閱讀 1632

[原題鏈結]請定義乙個佇列並實現函式 max_value 得到佇列裡的最大值,要求函式max_value、push_back 和 pop_front 的均攤時間複雜度都是o(1)。

若隊列為空,pop_front 和 max_value 需要返回 -1

示例 1

輸入: 

["maxqueue","push_back","push_back","max_value","pop_front","max_value"]

[,[1],[2],,,]

輸出: [null,null,null,2,1,2]

示例 2

輸入: 

["maxqueue","pop_front","max_value"]

[,,]

輸出: [null,-1,-1]

限制

題目和jz30類似,只不過從棧變為了佇列,思路參考jz59-i,不再展開。

原始佇列(單向/雙向無所謂)用於保持佇列的原始正常邏輯;輔助佇列(雙向佇列)用於儲存原始佇列中所有非嚴格降序的元素,使最大元素永遠位於輔助佇列的隊首。在定義pop_front()函式時注意保持兩個佇列元素的一致性:當最大元素從原始佇列內被彈出之後,同時彈出輔助佇列的隊首元素,保證輔助佇列的新隊首元素就是下乙個最大值。

import queue

class

maxqueue

:def

__init__

(self)

: self.deque = queue.deque(

)#輔助佇列

self.queue = queue.queue(

)#原始佇列

defmax_value

(self)

->

int:

return self.deque[0]

if self.deque else-1

defpush_back

(self, value:

int)

->

none

:while self.deque and self.deque[-1

]< value:

self.deque.pop(

) self.queue.put(value)

defpop_front

(self)

->

int:

ifnot self.deque:

return-1

ans = self.queue.get(

)if ans == self.deque[0]

: self.deque.popleft(

)return ans

# your maxqueue object will be instantiated and called as such:

# obj = maxqueue()

# param_1 = obj.max_value()

# obj.push_back(value)

# param_3 = obj.pop_front()

面試題59 II 佇列的最大值

請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 示例 1 輸入 maxqueue push back push ba...

劍指 Offer 59 II 佇列的最大值

題目描述 請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 示例1 輸入 maxqueue push back p...

劍指Offer 59 II 佇列的最大值

請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 額外維護乙個雙端佇列,用來儲存當前佇列可能的最大值,且是有序的,...