定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的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 ...