一种解决方法是使用双向队列。在这个队列中,我们会维护一个递减序列,用于存储可能的最小值。当一个新值被添加到队列中时,我们将删除与该值大的任何其他值,因为他们不可能是连续的最小值。同样地,当我们需要找到下一个最小值时,我们只需要检查队列的第一个元素。这种方法可以避免在搜索连续最小值时频繁进行推入/弹出的操作。
以下是使用 Python 实现的代码示例:
class MinQueue:
def __init__(self):
self.q = deque()
def push(self, x):
# 移除队列中所有比x大的值
while self.q and self.q[-1] > x:
self.q.pop()
self.q.append(x)
def pop(self, x):
# 如果队列中的第一个元素是当前最小元素,则弹出该元素
if self.q and self.q[0] == x:
self.q.popleft()
def get_min(self):
return self.q[0] if self.q else None
在上面的代码中,push
方法用于将新元素添加到队列中并维护递减序列,pop
方法用于从队列中删除给定元素,get_min
方法用于获取当前的最小元素。通过使用这个数据结构,我们可以快速找到连续的最小值而不用频繁地进行推入/弹出操作。