劍指Offer 包含min函式的棧

2021-09-19 23:41:48 字數 565 閱讀 5700

class solution 

void pop()

int top()

int min()

};

先建立兩個棧分別來儲存當前新增的資料和每次更新後的最小值集合。

datastack,這個棧就是很平常的進棧出棧;

minstack,這個需要把握好棧中值的更新。

入棧:(1)當棧內為空的時候,直接入棧 (2)不為空時,當新入棧的值小於或等於minstack棧頂的元素時,則值也進入minstack中,否則,不操作。

為什麼小於的時候入棧? 因為這樣能保證minstack棧頂的值始終為當前棧中所有值的最小值。

為什麼等於的時候也可以入棧?因為這樣防止有多個相同的最小值進棧時,後面出棧的時候只能把自己對應的minstack內的值帶走,這樣minstack棧中的值不會混亂。

出棧:(1)當棧為空時,就退出 (2)不為空時,當datastack出棧的值和minstack出棧的值相等的時候,就把minstack棧頂的值一同壓出。因為當兩邊出棧後,最小值會更新,datastack棧內對應的最小值就應該是minstack的棧頂。

劍指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 ...