劍指offer 包含min函式的棧

2022-08-01 10:27:12 字數 634 閱讀 7213

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

首先拿到這題,我們一上來想到的可否用乙個中間變數來存放最小值,這種在對於入棧時最小值的更新是可以起到作用的,但是出棧時如果包含該最小值的變數彈出了,最小值就無法實現更新了。

所以接下來我們用乙個輔助棧來實現最小值的更新工作。

這個輔助棧工作原理:

入棧時,1)當資料棧為空時,進入棧的元素同時也進入輔助棧;2)當它不為空時,就把該入棧元素與輔助棧的棧頂元素進行比較,若入棧元素小,則該元素同時也進入輔助棧;若不是,則對輔助棧不進行操作

出棧時,1)當輔助棧的棧頂元素等於處理資料的資料棧棧頂元素時,不僅資料棧要彈出元素,輔助棧也要彈出棧頂元素,2)當輔助棧的棧頂元素不等於處理資料的資料棧棧頂元素時,只對資料棧進行出棧操作。

這樣我們思路就很明確了:min函式只需返回輔助棧的棧頂元素。

class solution 

void pop()

int top()

int min()

private:

stackdatestack;

stackminstack;

};

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