面試題59 II 佇列的最大值

2021-10-03 14:50:52 字數 2180 閱讀 2862

請定義乙個佇列並實現函式 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 ...