📅  最后修改于: 2023-12-03 15:42:17.151000             🧑  作者: Mango
这是一道关于栈和队列的算法问题,出现在2014年的计算机科学GATE考试中。
在这道题目中,需要我们实现一个数据结构,满足以下要求:
为了实现上述的要求,我们需要选择合适的数据结构。
对于插入和删除操作,我们可以选择使用栈或队列来实现。
对于查询操作,我们需要确定一个最小值,并且能够在常数时间内得到这个最小值。这个最小值可以按照以下思路得到:
class StackWithMin:
def __init__(self):
self.stack = []
self.min_stack = []
def push(self, val):
self.stack.append(val)
if not self.min_stack or val <= self.min_stack[-1]:
self.min_stack.append(val)
def pop(self):
if not self.min_stack or self.stack[-1] != self.min_stack[-1]:
return self.stack.pop()
else:
self.min_stack.pop()
return self.stack.pop()
def get_min(self):
return self.min_stack[-1]
from collections import deque
class QueueWithMin:
def __init__(self):
self.queue = deque()
self.min_queue = deque()
def push(self, val):
self.queue.append(val)
while self.min_queue and val < self.min_queue[-1]:
self.min_queue.pop()
self.min_queue.append(val)
def pop(self):
if self.queue[0] == self.min_queue[0]:
self.min_queue.popleft()
return self.queue.popleft()
def get_min(self):
return self.min_queue[0]
以上就是本题的详细介绍和代码实现。本题考察了对于栈、队列数据结构的理解,并考察了优化算法的能力。