2 7 劍指offer 包含min函式的棧

2021-09-10 15:23:45 字數 964 閱讀 5153

定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式(時間複雜度應為o(1))。

如果只用乙個變數來儲存最小值,那麼當最小值彈出棧後,無法獲取第二小的值,因此,擴充套件思路,用乙個輔助棧來儲存最小值,棧彈出棧頂元素時,輔助棧同時彈出棧頂元素。

注意比較大小時,加入對獲取的最小值是否為none的判斷,容易忽略導致錯誤。

學會初始化類內變數的方法,定義__init__(self)函式。

# -*- coding:utf-8 -*-

class

solution

:def

__init__

(self)

: self.stack =

self.assist =

defpush

(self, node)

:# write code here

m = self.

min(

)if m ==

none

or node < m:

else

:def

pop(self)

:# write code here

iflen

(self.stack)!=0

: self.assist.pop(

)return self.stack.pop(

)def

top(self)

:# write code here

iflen

(self.stack)!=0

:return self.stack[-1

]def

min(self)

:# write code here

iflen

(self.assist)!=0

:return self.assist[-1

]

劍指offer 包含min 的棧

分析 關於棧的push pop top 方法都是和普通棧一樣,就是得到棧中最小元素min 方法不一樣。假如我們對每次push進棧的元素進行排序,使得最小的元素位於棧頂,那麼就可以在o 1 時間複雜度內實現min 方法。但單純這樣子不能保證pop,top等方法是按照棧的先入後出的規定。換言之,此時則不...

劍指offer 包含min的棧

思路 該題主要是補充棧的min方法,例如 棧有pop push peek等內建方法,每次呼叫這些方法就能返回個結果或者有個響應,本題意在補充min方法,使得每次呼叫min方法都能得到棧中最小值,保證每次執行過min 函式後棧中元素不變。push 6 min 返回6 push 7 min 返回6,pu...

劍指offer 包含min函式的棧

一 問題描述 二 思路 兩個棧,乙個當前棧data,乙個輔助棧m min,輔助棧用來儲存當前的最小值,如果出棧,輔助棧也出棧,棧頂元素始終是當前的最小值。在入棧時,如果輔助棧為空或者當前值小於輔助棧棧頂元素,則將當前值加入輔助棧 否則將輔助棧的棧頂元素加入輔助棧,表明此次有大於min棧頂數字入棧。以...