題目描述:
定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的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();
}
}