1. 程式人生 > >設計包含min函數的棧

設計包含min函數的棧

要求 是否為空 微信 什麽 targe 中大 數組 cdn 好的

題目:設計包含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代碼:

技術分享圖片

技術分享圖片

運行結果:

技術分享圖片

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

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

點擊打開二維碼

設計包含min函數的棧