劍指 Offer 30 包含min函式的棧

2021-10-07 18:23:21 字數 1254 閱讀 5391

定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的 min 函式在該棧中,呼叫 min、push 及 pop 的時間複雜度都是 o(1)。

示例:

minstack minstack = new minstack();

minstack.push(-2);

minstack.push(0);

minstack.push(-3);

minstack.min(); --> 返回 -3.

minstack.pop();

minstack.top(); --> 返回 0.

minstack.min(); --> 返回 -2.

題目比較簡單就手動實現乙個棧,但是多了乙個min函式,得到棧中的最小元素,且時間複雜度o(1).要實現這個min函式可以用乙個棧去維護它,然後棧頂永遠保持最小的元素。

維護乙個棧而與,這個棧的維護主要在兩個函式裡面體現。

pop

class minstack:

def __init__(self):

"""initialize your data structure here.

"""self.stack =

self.minstack =

def push(self, x: int) -> none:

if not self.minstack or self.minstack[-1]>=x:

def pop(self) -> none:

if self.stack.pop()==self.minstack[-1]:

self.minstack.pop()

def top(self) -> int:

return self.stack[-1]

def min(self) -> int:

return self.minstack[-1]

# your minstack object will be instantiated and called as such:

# obj = minstack()

# obj.push(x)

# obj.pop()

# param_3 = obj.top()

# param_4 = obj.min()

總結:如果在棧中要實現最小或者最大元素,那麼一般情況是開闢另乙個棧就維護這麼乙個陣列。

劍指Offer 30 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 首先觀察到min的時間複雜度是o 1 所以不可能是在我們呼叫min的時候再去計算棧中元素的最小值,最小值一定是提前儲存好的。其次最小值必須隨著push和pop更新,也就...

劍指offer 30 包含min函式的棧

這道題的題目可以描述為 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式,在該棧中,呼叫min,push以及pop的時間複雜度都是o 1 typedef int datatype define maxsize 100 typedef structstack void stack...

劍指offer 30 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 常規思路的問題 如果每次push對棧排序,讓整個棧保持有序狀態,實際上已經破壞了棧這個結構,而且複雜度肯定不是o 1 如果用乙個變數記錄最小值,當這個最小值被pop出去後,找不到次小值。當然你也可以找個...