设计题 中等题里面的简单题 重拳出击 一个双端队列 一个辅助队列
java:
LinkedList.poll():检索并删除此列表的头部(第一个元素)。
LinkedList.pollFirst():检索并删除此列表的第一个元素,如果此列表为空,则返回null。
LinkedList.pollLast():检索并删除此列表的最后一个元素,如果此列表为空,则返回null。
LinkedList.pollFirst():此方法用于检索链表的第一个元素,初始元素或开始元素,但不会从列表中删除第一个元素。
class MaxQueue {
Queue<Integer> q;
Deque<Integer> d;
public MaxQueue() {
q = new LinkedList<Integer>();
d = new LinkedList<Integer>();
}
public int max_value() {
if(d.isEmpty()){
return -1;
}
return d.peekFirst();
}
public void push_back(int value) {
while(!d.isEmpty() && value > d.peekLast()){
d.pollLast();
}
d.offerLast(value);
q.offer(value);
}
public int pop_front() {
if(q.isEmpty()){
return -1;
}
int ans = q.poll();
if(ans == d.peekFirst()){
d.pollFirst();
}
return ans;
}
}
python3:
import queue
class MaxQueue:
def __init__(self):
self.deque = queue.deque()
self.queue = queue.Queue()
def max_value(self) -> int:
if not self.deque:
return -1
else:
return self.deque[0]
def push_back(self, value: int) -> None:
while self.deque and self.deque[-1] < value:
self.deque.pop()
self.deque.append(value)
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