包含min函數的棧

題目描述:

定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的min函數。在該棧中,調用min,push及pop的時間複雜度都是O(1).


分析:對於這個題目,需要藉助一個成員變量或一個棧來幫助解決問題,但一個成員變量顯然是不夠的,這裏就用到另外一個輔助棧來存儲每次數據棧中的最小值。

舉個例子:

我們分別壓入 5,7,4,2,那麼對應的最小值是5,5,4,2,即輔助棧此時爲5,5,4,2;

彈出的時候,(5,7,4,2)彈出2,最小值爲4,輔助棧也彈出2,爲(5,5,4),棧頂4,爲最小值;

繼續彈出4,數據棧爲(5,7),最小值爲5,輔助棧爲(5,5),棧頂爲5,。以此類推。

由此我們可以給出代碼:


import java.util.Stack;

public class StackWithMin {

Stack<Integer> m_data=new Stack<Integer>();
Stack<Integer> m_min=new Stack<Integer>();
public void push(int node) {
m_data.push(node);
if(m_min.empty() || node<m_min.peek())
m_min.push(node);
else
m_min.push(m_min.peek());
}
public void pop() {
m_data.pop();
m_min.pop();
}
public int top() {
return m_data.peek();
}
public int min() {
return m_min.peek();
}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章