題目:設(shè)計包含min函數(shù)的棧
原創(chuàng): 白話算法
要求:定義一個棧的數(shù)據(jù)結(jié)構(gòu),要求添加一個min函數(shù),使他能夠找到棧的最小元素。
要求是:函數(shù)min push pop的時間復(fù)雜度都是o(1)
寫在前面:為什么會有寫這樣一個公眾號的想法呢捉捅?我的工作的是測試開發(fā)漾根,在工作中大多是寫一些工程類的代碼接剩,對算法類的代碼寫的比較少灭美,因為想提高算法的思路屈张,同時又想保持寫代碼的基本能力剩胁,所以想到了寫公眾號的辦法诉植,也希望看到文章的同學們,大家可以一起進步~ 本題目是在網(wǎng)上找的goole的一道面試題昵观;一開始的想法是用一個int類型存儲數(shù)組中的最小值晾腔,但是這樣有pop或者有push操作時舌稀,一旦數(shù)據(jù)變了,就獲取不到棧中的最小值了建车。
所以代碼思路:用一個單獨的數(shù)組存貯數(shù)A之前最小值的下標
比如數(shù)據(jù)是 20, 0, -1, -2, 9, 10,100,-90扩借,
那么最小值小標為 0,1缤至,2潮罪,3,3领斥,3嫉到,3,7
代碼中有幾個注意點:
1 對于輸入的限制為數(shù)字
2 出棧時判斷棧是否為空
3 存貯最小值下標是月洛,是存這個數(shù)之前最小值的下標何恶,寫的時候容易誤寫成,存儲前一個數(shù)的下標嚼黔,建議多用幾組數(shù)據(jù)進行測試
比如: 0细层,1,2唬涧,3疫赎,4; 4碎节,3捧搞,2,1 2狮荔,3胎撇,-1,0殖氏,-90晚树,100 20, 0, -1, -2, 9, 10,100,-90
php代碼:
運行結(jié)果:
如果大家有更好的算法,歡迎溝通交流 也歡迎大家用其他語言實現(xiàn)
更多內(nèi)容雅采,歡迎關(guān)注微信訂閱號“玄魂工作室”
點擊打開二維碼