牛客網 劍指Offer JZ20 包含min函式的棧
阿新 • • 發佈:2021-09-03
定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的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
"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]