剑指offer第20题 牛客网在线编程链接 https://www.nowcoder.com/activity/oj
包含min函数的栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路
引入两个栈stack和minStack,对于栈stack,每次压栈实际的数字。对于栈minStack,如果压栈的数字小于minStack栈顶的数字,则压栈新的数字,反之,把栈顶的数字再压入一遍。
Python2.7编写
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack = [] #定义一个空栈,用来正常存放压栈数据
self.minStack = [] #用来存放最小值
def push(self, node):
#正常压入栈
self.stack.append(node)
#如果存放最小值的栈为空或者当前压栈数值小于栈中最小值,则压入保存最小值的栈中
if not self.minStack or node < self.min():
self.minStack.append(node)
else:
#否则,将栈中的最小值再压入栈一遍,这么做是为了保证两个栈中数的个数相同。方便进行出栈操作。
self.minStack.append(self.min())
def pop(self):
if not self.stack:
return None
self.stack.pop()
self.minStack.pop()
def top(self):
return self.stack[-1]
def min(self):
return self.minStack[-1]