最小元素的栈

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。
示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.


class MinStack(object):

def __init__(self):
"""
initialize your data structure here.
"""

def push(self, x):
"""
:type x: int
:rtype: void
"""

def pop(self):
"""
:rtype: void
"""

def top(self):
"""
:rtype: int
"""

def getMin(self):
"""
:rtype: int
"""


# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()

解答:

class MinStack(object):
def __init__(self):
self.lst = []
self.minlst =[]#最小栈元素定义一个0
def push(self, x):
self.lst.append(x)
if len(self.minlst) < 1:
self.minlst.append(x)
if x <= self.minlst[-1] :#压栈元素与当前栈顶元素作对比,小则入栈
self.minlst.append(x)
return True

def pop(self):
if not self.isEmpty():
if self.top() == self.minlst[-1]:
self.minlst.pop()
return self.lst.pop()
#获取栈顶元素
def top(self):
return self.lst[-1]
#获取当前栈中最小元素
def getMin(self):
if not self.isEmpty():
return self.minlst[-1]
#打印
def print(self):
print(self.lst)
def clear(self):
del(self.lst)
def isEmpty(self):
return len(self.lst) < 1

stack = MinStack();
stack.push(-2);
stack.push(0);
stack.push(-3);
stack.push(5);
stack.push(8);
print("入栈的数为:")
stack.print()
print("返回当前栈的最小元素为:")
print(stack.getMin())
print("出栈的数为:")
print(stack.pop())
print("返回前栈顶元素为:")
print(stack.top())
print("清空栈中元素")
stack.clear()

 

posted @ 2019-02-21 17:25  李罡  Views(303)  Comments(0Edit  收藏  举报