题目描述
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
解析
- 在数据栈的基础上维护一个用来存放最小值的辅助栈
- 每次入栈,新入栈的元素都要和辅助栈栈顶元素比较,如果新入栈的元素更小,就让它也加入最小栈中,否则最小栈再次压入其栈顶元素
- 每次出栈,数据栈和辅助栈同时弹出元素
- 这样就可以保证在任何情况下,辅助栈栈顶元素始终是数据栈中的最小元素
代码实现
public class MinFunctionStack{ Stack<Integer> data = new Stack<Integer>(); Stack<Integer> assist = new Stack<Integer>(); public void push(int node) { data.push(node); if(assist.size() == 0 || node < assist.peek()){ assist.push(node); }else{ assist.push(assist.peek()); } } public void pop() { if(data.size() > 0 && assist.size() > 0){ data.pop(); assist.pop(); } } public int top() { if(data.size() > 0){ return data.peek(); } return Integer.MIN_VALUE; } public int min() { if(data.size() > 0 && assist.size() > 0){ return assist.peek(); } return Integer.MIN_VALUE; }}