劍指offer 包含min函式的棧

2021-09-26 18:13:27 字數 989 閱讀 6082

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

思路:

看到這題,首先最理想的情況就是棧頂元素就是最小元素,這樣直接一次操作就可以得到棧中所含的最小元素,為了實現這個目的,可以利用乙個輔助棧來存放當前棧中的最小值

正常棧  3,4,2,5,1

輔助棧 3,3,2,2,1

每當有新元素要入棧,就與輔助棧頂元素比較大小,如果新元素小,就將該新元素入棧到兩個棧的棧頂,如果新元素比輔助棧的棧頂元素大,將新元素入正常棧,而將當前的輔助棧頂元素入棧到輔助棧。

當出棧時,輔助棧也要出棧

這種做法可以保證輔助棧頂元素一定都當前正常棧的最小值

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

class

solution

:def

__init__

(self)

: self.stack =

self.assist =

defpush

(self, node)

:min

= self.

min()if

not self.assist or node <

min:

else

:min

)def

pop(self)

:if self.stack:

self.assist.pop(

)return self.stack.pop(

)def

top(self)

:if self.stack:

return self.stack[-1

]def

min(self)

:if self.assist:

return self.assist[-1

]

劍指offer 包含min函式的棧

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

劍指offer 包含min函式的棧

題目描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。這個題要求時間複雜度是o 1 竟然想了好久沒想出來,原來思維定式了,一直在想既然要從小到大排序怎麼可能實現o 1 呢 其實由於出棧入棧是由順序的,用來記錄最小值的棧也不用完整記錄所有元素的順序,只要根據入棧的順序來就行 ...

劍指offer 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。思路 這裡,定義兩個棧,stack和min stack,其中,min stack的最後乙個數永遠保持是stack中最小的乙個數。具體的,在puch時,只儲存比當前最小的還要小的數。pop時,如果stack最小的數pop出,min ...