声明:
今天是第34道题。设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:设计一个支持 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.
解法1。主要是写好push函数,用二元数组存储当前push进来的数字和当前数组里的最小值,如何实现最小是通过每次与前一轮比较出的最小值比较,从而维持二元数组最后一个元素一直都是最小值。剩下pop、top函数就是返回最后1行第1个元素了,区别在于pop要调用1次pop函数将最后1个二元数组从stack中删除。getMin直接返回stack最后1行最后1个元素(即第2个元素),代码如下。
class MinStack(object):
# V 1.0,能提交
def __init__(self):
"""
initialize your data structure here.
"""
self.stack = []
# 重点是写好push函数,因为数据如何存储push进来的值和最小值决定了后续函数的实现
def push(self,x):
"""
:type x: int
:rtype: void
"""
if not self.stack:
self.stack.append((x,x))
else:
self.stack.append((x,min(x,self.stack[-1][1])))
def pop(self):
"""
:rtype: void
"""
if self.stack:
result = self.stack[-1][0]
self.stack.pop()
return result
else:
return None
def top(self):
"""
:rtype: int
"""
if self.stack:
return self.stack[-1][0]
else:
return None
def getMin(self):
"""
:rtype: int
"""
if self.stack:
return self.stack[-1][-1]
else:
return None
结尾
解法1:https://blog.csdn.net/u013511989/article/details/80053606