題目描述
定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的min函數。
# -*- coding:utf-8 -*-
class Solution:
def push(self, node):
# write code here
def pop(self):
# write code here
def top(self):
# write code here
def min(self):
# write code here
解題思路
題目要求實現如上四個方法,但是對於Python來說太簡單了,沒有什麼挑戰性,看到Java/C們那一長串的代碼,用Python的我好心虛。。。
回到這道題,入棧出棧函數比較無腦,需要稍微注意一下min函數。因爲實際操作中入棧出棧時動態交替執行,最小值可能被新入棧的更小值替換,也有可能被彈出,導致min值的動態變化。
這裏新建一個棧來存儲當前的最小值:有更小的值入棧時,將其壓入此棧,最小值爲棧頂元素;當位於棧頂的最小值出棧後,此時棧頂的元素就順應稱爲新的最小值。
我看題目要求實現的top()函數定義什麼作用,就偷懶用top()函數返回存儲最小值的棧的棧頂元素了。
Python代碼
import sys
class Solution:
def __init__(self):
self.list = []
self.minStack = [sys.maxsize]
def push(self, node):
self.list.append(node)
if node < self.top():
self.minStack.append(node)
def pop(self):
if self.list:
popNum = self.list.pop(-1)
if popNum == self.top():
self.minStack.pop(-1)
return popNum
else:
return None
def top(self):
if self.minStack:
return self.minStack[-1]
else:
return None
def min(self):
return self.top()