劍指offer 30:包含min函數的棧

題意

定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間複雜度應爲O(1))。

思路

常規思路的問題:

  1. 如果每次push對棧排序,讓整個棧保持有序狀態,實際上已經破壞了棧這個結構,而且複雜度肯定不是O(1)
  2. 如果用一個變量記錄最小值,當這個最小值被pop出去後,找不到次小值。當然你也可以找個變量存次小值,這樣的問題是第三小的值你還得找個變量存,無窮盡也。

因此,提出使用一個輔助棧的方法:

  1. 當棧爲空時,將一個值push進棧和輔助棧
  2. 第二個數來時,比較這個數和輔助棧中的數哪個大,如果這個數大,就繼續push輔助棧中那個較小的數進入輔助棧,如果當前數小,就push這個小的數進入輔助棧。
  3. push的情況依次類推,在輔助棧中的數從頂往下必然是遞增的。因此棧頂一定是最小的書,第二個就是次小,往下越來越大。
  4. pop時,把輔助棧的元素一起pop出來。也就是更新當棧頂元素進入棧造成的大小值的影響。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章