1. 程式人生 > 其它 >牛客網 劍指Offer JZ20 包含min函式的棧

牛客網 劍指Offer JZ20 包含min函式的棧

定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式,並且呼叫 min函式、push函式 及 pop函式 的時間複雜度都是 O(1) push(value):將value壓入棧中 pop():彈出棧頂元素 top():獲取棧頂元素 min():獲取棧中最小元素 示例: 輸入:["PSH-1","PSH2","MIN","TOP","POP","PSH1","TOP","MIN"] 輸出:-1,2,1,-1 解析: "PSH-1"表示將-1壓入棧中,棧中元素為-1 "PSH2"表示將2壓入棧中,棧中元素為2,-1 “MIN”表示獲取此時棧中最小元素==>返回-1 "TOP"表示獲取棧頂元素==>返回2 "POP"表示彈出棧頂元素,彈出2,棧中元素為-1 "PSH-1"表示將1壓入棧中,棧中元素為1,-1
"TOP"表示獲取棧頂元素==>返回1 “MIN”表示獲取此時棧中最小元素==>返回-1
class Solution:
    def __init__(self):
        self.stack = []  #初始化原棧
        self.stack_min = []  #初始化最小值棧
    def push(self, node):
        self.stack.append(node) #往原棧中新增 元素
        if not self.stack_min:    #一開始也往最小值棧中新增元素
            self.stack_min.append(node)
        
elif node < self.stack_min[-1]: #再次新增元素的時候要同最小值棧中元素比較,小於最小值棧中索引-1的對應值,就把node加入; self.stack_min.append(node) else: self.stack_min.append(self.stack_min[-1]) #否則把索引-1的對應值新增到stack_min中 def pop(self): self.stack.pop() #彈出棧頂元素則分別獲取即可 self.stack_min.pop()
def top(self): return self.stack[-1] def min(self): return self.stack_min[-1]