請定義乙個佇列並實現函式 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]
限制:1 <= push_back,pop_front,max_value的總算子 <= 10000
1 <= value <= 10^5
class maxqueue:
#利用max函式找最大值,不太符合o(1)的要求
def __init__(self):
self.queue =
self.max_num = 0
def max_value(self) -> int:
if self.queue == :
return -1
else:
return self.max_num
def push_back(self, value: int) -> none:
if value>self.max_num:
self.max_num = value
def pop_front(self) -> int:
if self.queue == :
return -1
else:
return self.queue.pop(0)
import queue
class maxqueue:
def __init__(self):
#新增deque雙端佇列作為遞減數列
self.deque = queue.deque()
self.queue = queue.queue()
def max_value(self) -> int:
return self.deque[0] if self.deque else -1
def push_back(self, value: int) -> none:
#將新加入的value從雙端佇列deque的尾部開始比較,比value小的全部pop
#由於queue是佇列。只能先進先出,所以將deque中小的pop不會影響
#queue在pop時如果是最大值(deque[0]) ,會將deque[0]踢出
#eg1: push:1->max=1,deque:1,queue:1 // push:2->max=2,deque:2 , queue:1,2 //
# pop=1 -> max=2,deque:2,queue:2
#eg2:push:2->max=2,deque:2,queue:2 // push:1->max=2,deque:2,1 , queue:2,1 //
# pop=2 -> max=1,deque:1,queue:1
while self.deque and self.deque[-1] < value:
self.deque.pop()
self.queue.put(value)
def pop_front(self) -> int:
if not 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 class maxqueue public maxqueue pub...
面試題59 II 佇列的最大值(中等題)
題目描述 請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 示例 1 輸入 maxqueue push back pu...
LeetCode佇列 面試題59 II佇列的最大值
題目描述 請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 示例 1 輸入 maxqueue push back ...