劍指 Offer 30 包含min函式的棧

2021-10-18 15:58:00 字數 1294 閱讀 5434

題目:可以用棧的資料結構。實現乙個可以返回最小值的棧的api,有push pop top min方法。

public void push(int x)

public void pop()

public int top()

public int min()

思路:用兩個棧stacka和stackb。

既然還需要實現乙個棧的push和pop和top功能,所以這些元素肯定都要放到stacka中來用它來實現這些方法(因為stacka本來就是個棧)。那stackb自然用來實現min方法

當push時stacka先push一下,由於stackb裡疊加的存放此刻的最小值,所以當stackb為empty或x小於等於stackb.peek()時就stackb再push一下。(x等於的時候也要push,否則當有兩個一樣的x情況下stackb最小的就放乙個,那pop一下最小值就不對了,就出問題了)。

當pop時考慮stacka為empty的情況,當stacka不為empty時stackb也不為empty。當stacka.peek()為tempnum變數(要拿臨時變數儲存,否則兩個.peek() 用 『==』 比較的是物件,就出問題了)與stackb.peek()相等時,把stackb.pop()一下。然後stacka一定要pop,放到最後。

top和min方法,考慮一下為empty的情況,分別返回stacka和stackb的peek()就好。

class

minstack

/* stacka實現乙個棧的正常操作,stackb來可疊加地儲存min值

*/public

void

push

(int x)

}public

void

pop(

)//先用tempnum給接收過來,要不可能會出問題

int tempnum = stacka.

peek()

;if(tempnum == stackb.

peek()

) stacka.

pop();

}public

inttop()

return stacka.

peek()

;}public

intmin()

return stackb.

peek()

;}}

劍指Offer 30 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 首先觀察到min的時間複雜度是o 1 所以不可能是在我們呼叫min的時候再去計算棧中元素的最小值,最小值一定是提前儲存好的。其次最小值必須隨著push和pop更新,也就...

劍指offer 30 包含min函式的棧

這道題的題目可以描述為 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式,在該棧中,呼叫min,push以及pop的時間複雜度都是o 1 typedef int datatype define maxsize 100 typedef structstack void stack...

劍指offer 30 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 常規思路的問題 如果每次push對棧排序,讓整個棧保持有序狀態,實際上已經破壞了棧這個結構,而且複雜度肯定不是o 1 如果用乙個變數記錄最小值,當這個最小值被pop出去後,找不到次小值。當然你也可以找個...