题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路
借助辅助栈实现: 压栈时:若辅助栈为空,则将节点压入辅助栈。否则,当当前节点小于等于辅助栈栈顶元素时将节点压入辅助栈。 出栈时:若辅助栈和数据栈栈顶元素相同,则同时出栈。否则,只出栈数据栈元素。
代码
import java.util.Stack;
public class Solution {
private Stack stack = new Stack(); private Stack minStack = new Stack(); public void push(int node) { //当辅助栈为空或者当前节点值小于等于辅助栈栈顶元素才压栈 if(minStack.isEmpty() || node <= (Integer)minStack.peek()){ minStack.push(node); } stack.push(node); } public void pop() { if(stack.peek()==minStack.peek()){ minStack.pop(); } stack.pop(); } public int top() { return (Integer)stack.peek(); } public int min() { return (Integer)minStack.peek(); } }