《劍指offer》(面試題21):包含min函式的棧
阿新 • • 發佈:2019-01-25
前言:
當一眼看不出問題中隱藏的規律的時候,我們可以試著用一兩個例子模擬操作的過程,這樣說不定就能通過具體的例子找到抽象的規律。 可以舉出一兩個例子,告訴面試官問的演算法是怎麼一步步處理這個例子的。模擬壓棧和彈出幾個數字,分析每次操作之後資料棧,輔助棧和最小值是什麼? 怎麼檢查程式碼呢?可以執行幾個測試用例。題目描述
定義棧的資料結構,請在該型別中實現一個能夠得到棧最小元素的min函式。
解題思路
我們很自然的可以想到,可以利用兩個棧來實現該操作:一個棧sData用來存放資料,另一個棧sMin用來輔助更新最小值狀態。
棧內壓入3、4、2、1之後接連兩次彈出棧頂數字之後再壓入0時,資料棧、輔助棧和最小值狀態舉例如圖所示:
python 程式碼實現:
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.sData = []
self.sMin = []
def push(self, node):
# write code here
self.sData.append(node)
if len(self.sMin) == 0:
self.sMin.append(node)
if self.sMin[-1] > node:
self.sMin.append(node)
def pop(self):
# write code here
if self.sData[-1] == self.sMin[-1]:
self.sMin.pop()
self.sData.pop()
def top(self):
# write code here
return self.sData[-1]
def min(self):
# write code here
return self.sMin[-1]