劍指offer 面試30題
阿新 • • 發佈:2018-06-23
round 最小 color 數據 pan ret 結構 AS ack
面試30題:
題目:包含min函數的棧
題:定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的min函數。在該棧中,調用min、push、pop的時間復雜度都是O(1)
解題思路:1)如果每次壓入新元素時,再調整讓新元素位於棧頂,這種思路不能保證最後壓入棧的元素最先出棧,因此這個數據結構已經不是棧了。X
2)如果在棧中添加一個成員變量存放最小元素,那麽當最小元素彈出後,就不知道下一個最小元素在哪兒了。因此,必須將次小元素保存。X
3)把每次的最小元素保存起來放在另一個輔助棧裏。 √
解題代碼:
# -*- coding:utf-8 -*- classSolution: def __init__(self): self.stack=[] self.minstack=[] def push(self, node): # write code here self.stack.append(node) if self.minstack==[] or node<self.min(): self.minstack.append(node) else: self.minstack.append(self.min())def pop(self): # write code here if self.stack==[] or self.minstack==[]: return None self.stack.pop() self.minstack.pop() def top(self): # write code here return self.stack[-1] def min(self): # write code here returnself.minstack[-1]
劍指offer 面試30題