📅  最后修改于: 2023-12-03 14:57:39.922000             🧑  作者: Mango
队列(Queue)是一种基本的数据结构,它遵循先进先出(FIFO)的原则,即先放入队列的数据将被先取出。队列可以用数组或链表实现。
本题要求我们设计一个队列数据结构,以在O(1)的时间复杂度内获得队列中的最小值或最大值。
为了能够在O(1)时间获得队列中的最小值或最大值,我们可以利用辅助栈(Auxiliary Stack)。
具体实现方法如下:
class QueueWithMin(object):
def __init__(self):
self.stack1 = []
self.stack2 = []
def push(self, value):
self.stack1.append(value)
if not self.stack2 or value <= self.stack2[-1]:
self.stack2.append(value)
def pop(self):
if not self.stack1:
return None
value = self.stack1.pop(0)
if self.stack2 and value == self.stack2[0]:
self.stack2.pop(0)
return value
def min(self):
if not self.stack2:
return None
return self.stack2[-1]
def max(self):
if not self.stack2:
return None
return self.stack2[-1]
本题利用了辅助栈的思想,实现了在O(1)时间内获取最小值或最大值的功能。需要注意的是,由于Stack2只存储最小值或最大值,因此其长度不一定和Stack1相等。