题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

题目地址

https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49?tpId=13&tqId=11173&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

思路

使用两个栈,一个为数据栈,一个为辅助栈。数据栈用于存储所有数据,辅助栈用于存储最小值。

举个例子:

入栈时:首先往空的数字栈里压入数字3,显然现在3是最小值,我们也把最小值压入辅助栈。接下来压入数字4,由于4大于之前的最小值,因此我们只要入数据栈,不压入辅助栈。

出栈时:当数据栈和辅助栈相同,辅助栈和数据栈的栈顶元素都要出栈,否则,仅数据栈的栈顶元素出栈。

获取栈顶元素时:直接返回数据栈的栈顶元素

栈最小元素:直接返回辅助栈的栈顶元素

Python

# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.dataStack = []
self.minStack = []
def push(self, node):
# write code here
self.dataStack.append(node)
if len(self.minStack) <= 0 or node < self.minStack[-1]:
self.minStack.append(node) def pop(self):
# write code here
val = self.dataStack.pop()
if val == self.minStack[-1]:
self.minStack.pop()
return val def top(self):
# write code here
return self.dataStack[-1] def min(self):
# write code here
return self.minStack[-1] if __name__ == '__main__':
result = Solution()
result.push(2)
result.push(4)
result.push(1)
result.push(3)
result.pop()
result.top()
result.min()
05-11 19:35