题目描述
- 定义栈的数据结构
- 并在该类型中实现一个能够得到栈中所含最小元素的min函数。时间复杂度应为O(1)
理解
解题思路
思路1
class Solution:
def __init__(self):
self.stack = []
self.min_stack = []
def push(self, node):
self.stack.append(node)
if self.min_stack == [] or node <= self.min():
self.min_stack.append(node)
def pop(self):
if self.stack != []:
if self.stack[-1] == self.min_stack[-1]:
self.min_stack.pop()
return self.stack.pop()
def top(self):
return self.stack[-1]
def min(self):
if self.min_stack[-1] != None:
return self.min_stack[-1]
class MinInStack:
def __init__(self):
self.stack = []
# 存放最小值
self.min_stack = []
# 存放长度
self.length = 0
def isEmpty(self):
# 判断是否为空
return self.length == 0
def getLength(self):
# 得到栈的长度
return self.length
def min(self):
# 返回最小值
if self.isEmpty():
print("Stack is empty!")
return
if self.min_stack:
return self.min_stack[-1]
def push(self, data):
if not isinstance(data, int) and not isinstance(data, float):
print("The element must be numeric!")
return
# 压栈
self.stack.append(data)
self.length += 1
# 如果栈为空或者小于最小值
if self.min_stack == [] or data < self.min():
self.min_stack.append(data)
else:
self.min_stack.append(self.min())
def pop(self):
# 弹栈
if self.isEmpty():
print("Stack is empty!")
return
data = self.stack.pop()
self.min_stack.pop()
self.length -= 1
return data
def clear(self):
# 清空栈
self.stack = []
self.min_stack = []
self.length = 0