min函式棧解題思路分析

2021-07-07 02:45:15 字數 752 閱讀 8984

(劍指offer面試題21)

目的:為快速得到min,需要儲存min

維持題目條件的完整性:棧,其性質:出棧、入棧

出棧、入棧對min帶來的影響:min會變化。

出棧:min沒出,min不變;min出了,新的min是?

這裡的誤區:min出了,新的min是第二小元素。錯誤,因為min出了,min可能不變,棧中還有等於min的元素(此處要求思維嚴密性)。

那麼min出了,難道要看棧內還有沒有等於min的元素嗎?不,這樣會很麻煩。這時思路容易複雜化。

當複雜化時,不要盲目繼續複雜考慮,要深入問題本質,要簡單化。

出棧的本質是什麼?注意到出棧、入棧是相反、對稱的動作,其本質應該是一樣的。不應該孤立的考慮出棧或者入棧,應該綜合、統一起來。它們的共同點是?

要知道出棧之後min是什麼,需要知道,出棧之後,棧的狀態是什麼?是個什麼樣的棧?

對,是之前的乙個棧,就是最近的乙個歷史棧,就像昨天一樣。

之前那個棧的min是多少?可以記錄下來。如果你記錄的是第二小的值,你記錄的不是之前那個棧的最小值。

彈出乙個值時,也就是棧恢復到上乙個歷史版本,輔助棧應該是最小值的歷史版本。

棧的本質是時間序列。出棧入棧是時間(棧狀態)的前後推移。為了維持棧的性質,同時達到業務需求(也就是題目要求),必須在處理業務資訊的結構中加入棧的性質的考慮。

棧被用在多層函式呼叫中,也是應用其儲存時間序列的性質。

注意到這個問題,其實用到了遞迴思想,在動態中,往往需要找到相似的子問題,這對解決問題大有幫助。

js 包含min函式的棧 包含min函式的棧

目標 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的 min 函式在該棧中,呼叫 min push 及 pop 的時間複雜度都是 o 1 設計思路 我們要做的是在我們每次資料入棧的時候,記錄當前資料棧中最小值,並且在pop 出棧之後依然能找到最小值 方案 如果只用乙個 min 變數來儲...

包含min函式的棧

題目描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000000 n代表將要輸入的操作的步驟數。接下來有n行,每行開始有乙個字母ci。ci s 時,接下有乙個數字k,代...

包含min函式的棧

1.問題描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的函式,在該棧中呼叫min,push及pop的時間複雜度都為o 1 來自 劍指offer 2.分析 我們可以使用乙個輔助棧,專門來處理題目中得到棧的最小元素的函式時間複雜度為o 1 的這個需求。當我們壓棧時,另外乙個棧正常進行,...