题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push,pop的时间复杂度都是o(1).
package Stackqueue;
import java.util.Stack;
public class StackMinMain {
Stack<Integer> m_data = new Stack<Integer>();
Stack<Integer> m_min = new Stack<Integer>();
public void push(int value) {
m_data.push(value);
if (m_min.size() == 0 || value < m_min.firstElement())
m_min.push(value);
else
m_min.push(m_min.firstElement());
}
public void pop() {
assert (m_data.size() > 0 && m_min.size() > 0);
m_data.pop();
m_min.pop();
}
public int min() {
assert (m_data.size() > 0 && m_min.size() > 0);
return m_min.peek();
}
public static void main(String[] args) {
StackMinMain stackMinMain = new StackMinMain();
int[] a = { 3, 4, 2, 1 };
for (int i = 0; i < a.length; i++)
stackMinMain.push(a[i]);
System.out.println(stackMinMain.min());
}
}
结果显示:
1