包含min函式的棧
阿新 • • 發佈:2018-12-12
題目描述:
定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式(時間複雜度應為O(1))。
程式碼實現:
# -*- coding:utf-8 -*- class Solution: def __init__(self): self.base=[] self.copy=[] def push(self, node): # write code here if len(self.copy)==0: self.copy.append(node) if self.copy[-1]>node: self.copy.append(node) self.base.append(node) def pop(self): # write code here if self.base[-1]==self.copy[-1]: self.copy.pop() self.base.pop() def top(self): # write code here #return self.base[len(self.base)-1] return self.base[-1] def min(self): # write code here if self.base is not None: return self.copy[-1] else: return None
思路:
通常所見的棧的操作都是push和pop,這次需要包含min***作,這個***作的實現,需要藉助一個輔助棧來記錄每次進/出棧後當時的最小值。
當需要進站時,原棧正常進棧,輔助棧需要檢查進棧元素與當前的棧頂元素的大小關係,如果比當前的棧頂元素大,就不進棧,若小則說明該元素進棧後的最小值是它本身,他也要進入輔助棧,以記錄此時的最小值。
當需要出棧時,原棧正常出棧,輔助棧,需要判斷出棧元素與棧頂元素的大小關係,若相同,則輔助棧也出棧,因為原棧中最小值出去了,最小值改變了,變為輔助棧的下一個元素(挨著棧頂的元素)。若不相同,則輔助棧不用出棧,最小值還是輔助棧中的棧頂元素。