設計包含min函式的棧

玄魂發表於2019-02-22

題目:設計包含min函式的棧

原創: 白話演算法

要求:定義一個棧的資料結構,要求新增一個min函式,使他能夠找到棧的最小元素。

要求是:函式min push pop的時間複雜度都是o(1)

寫在前面:為什麼會有寫這樣一個公眾號的想法呢?我的工作的是測試開發,在工作中大多是寫一些工程類的程式碼,對演算法類的程式碼寫的比較少,因為想提高演算法的思路,同時又想保持寫程式碼的基本能力,所以想到了寫公眾號的辦法,也希望看到文章的同學們,大家可以一起進步~ 本題目是在網上找的goole的一道面試題;一開始的想法是用一個int型別儲存陣列中的最小值,但是這樣有pop或者有push操作時,一旦資料變了,就獲取不到棧中的最小值了。

所以程式碼思路:用一個單獨的陣列存貯數A之前最小值的下標

比如資料是 20, 0, -1, -2, 9, 10,100,-90,

那麼最小值小標為 0,1,2,3,3,3,3,7

程式碼中有幾個注意點:

1 對於輸入的限制為數字

2 出棧時判斷棧是否為空

3 存貯最小值下標是,是存這個數之前最小值的下標,寫的時候容易誤寫成,儲存前一個數的下標,建議多用幾組資料進行測試

比如: 0,1,2,3,4; 4,3,2,1 2,3,-1,0,-90,100 20, 0, -1, -2, 9, 10,100,-90

php程式碼:

image
image

執行結果:

image

如果大家有更好的演算法,歡迎溝通交流 也歡迎大家用其他語言實現

更多內容,歡迎關注微信訂閱號“玄魂工作室”

點選開啟二維碼

相關文章