最小棧的實現(xiàn)

題目: 實現(xiàn)一個棧,帶有出棧(pop),入棧(push),取最小元素(getMin)三個方法。要保證這三個方法的時間復(fù)雜度都是O(1)。

  1. 設(shè)原有的棧叫做棧A,此時創(chuàng)建一個額外的棧B,用于輔助原棧A。

  2. 當(dāng)?shù)谝粋€元素進(jìn)入棧A的時候,讓新元素的下標(biāo)進(jìn)入棧B。把這個第一個元素當(dāng)做是棧A的當(dāng)前最小值。(考慮到棧中元素可能不是類對象,所以B棧存儲的是A棧元素的下標(biāo))

  3. 每當(dāng)新元素進(jìn)入棧A時,比較新元素和棧A當(dāng)前最小值的大小,如果小于棧A當(dāng)前最小值,則讓新元素的下標(biāo)進(jìn)入棧B,此時棧B的棧頂元素就是棧A當(dāng)前最小值的下標(biāo)。

  4. 每當(dāng)棧A有元素出棧時,如果出棧元素是棧A當(dāng)前最小值,則讓棧B的棧頂元素也出棧。此時棧B余下的棧頂元素所指向的,是棧A當(dāng)中原本第二小的元素,代替剛才的出棧元素成為了棧A的當(dāng)前最小值。(備胎轉(zhuǎn)正)

  5. 當(dāng)調(diào)用getMin方法的時候,直接返回棧B的棧頂所指向的棧A對應(yīng)元素即可。

這個解法中進(jìn)棧、出棧、取最小值的時間復(fù)雜度都是O(1),最壞情況空間復(fù)雜度是O(N)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目:實現(xiàn)一個棧,帶有出棧(pop),入棧(push),取最小元素(getMin)三個方法。要保證這三個方法的時間...
    Caolongs閱讀 249評論 0 0
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,246評論 0 38
  • 先來個簡單的棧(先進(jìn)后出) 題目:實現(xiàn)一個棧,帶有出棧(pop),入棧(push),取最小元素(getMin)三個...
    darklindj閱讀 1,415評論 0 0
  • 為了補(bǔ)考科目三,今天下午去練車了。帶我的教練請假了,所以由另外一個教練帶我們練.一直以來都以為是自己眼睛有點斜視,...
    玲夏ling閱讀 233評論 0 0
  • 這個世界上,有一個人是永遠(yuǎn)等著你的。不管什么時候,不管什么地方。反正,總有這么個人。這句話,讓我找得很是辛苦?!侗?..
    飄雨桐V閱讀 267評論 0 0

友情鏈接更多精彩內(nèi)容