題目:設計包含min函數的棧php
原創: 白話算法面試
要求:定義一個棧的數據結構,要求添加一個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 對於輸入的限制爲數字blog
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代碼:
運行結果:
若是你們有更好的算法,歡迎溝通交流 也歡迎你們用其餘語言實現
更多內容,歡迎關注微信訂閱號「玄魂工做室」
點擊打開二維碼