**
设计一个有getMin功能的栈
**
设计一个具有getMin()功能的栈:
1.push、pop、getMin()时间复杂度为O(1)
2.设计栈时可以使用现有的栈结构
一个栈本身有先进后出的顺序,要求当前的最小的值,又能实现pop弹出,则考虑用两个栈来实现。
方法一
class Stack1:
def __init__(self,object=None) -> None:
self.stack=[object]
self.stack_min=[object]
def push(self,x):
self.stack.insert(0,x)
if x<=self.stack_min(0) or self.stack_min(0)==None:
self.stack_min.insert(0,x)
def pop(self):
x=self.stack.pop(0)
if x==self.stack_min(0):
self.stack_min.pop(0)
return x
def getMin(self):
return self.stack_min(0)
方法二
class Stack2:
def __init__(self,object=None) -> None:
self.stack=[object]
self.stack_min=[object]
def push(self,x):
self.stack.insert(0,x)
if x<self.stack_min(0) or self.stack_min(0)==None:
self.stack_min.insert(0,x)
else:
flag=self.stack_min(0)
self.stack_min.insert(0,flag)
def pop(self):
x=self.stack.pop(0)
self.stack_min.pop(0)
return x
def getMin(self):
return self.stack_min(0)
开始刷题,不能废了自己的双手
本文介绍了两种方法实现一个具有getMin功能的栈,保证push、pop和getMin操作的时间复杂度为O(1)。方法一是每当有新元素入栈时,若该元素小于或等于栈中当前最小值,就将其压入辅助栈;方法二则是如果新元素不小于栈中最小值,将当前最小值复制一份再压入辅助栈。这两种方案都利用了两个栈来保持数据和最小值的同步,从而在常数时间内获取最小值。
924

被折叠的 条评论
为什么被折叠?



