题解 | #包含min函数的栈#
包含min函数的栈
http://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49
/**使用一个主栈用来存储数据,一个最小值栈,用来存放最小值。 *主栈和最小值栈的容量和存储数据量没有必要保持一致。 */import java.util.Stack; public class Solution { Stack<Integer> stackMain = new Stack<>(); // 主栈,存储所有数据 Stack<Integer> stackMin = new Stack<>(); // 最小值栈,存储最小值 public Solution() { stackMain = new Stack<>(); stackMin = new Stack<>(); } // 测试主栈和最小值栈是否为空 public boolean empty() { return stackMain.empty() && stackMin.empty(); } // 入栈操作,如果主栈和最小值栈都为空,则同时入栈 // 如果不为空,入栈元素和最小值栈顶部元素对比 public void push(int node) { Stack<Integer> tmp = new Stack<>(); if (empty()) { stackMain.push(node); stackMin.push(node); } stackMain.push(node); if (stackMin.peek() >= node) stackMin.push(node); } // 出栈操作,先判断出栈元素是否是最小值 public void pop() { if (stackMain.peek() == stackMin.peek()) stackMin.pop(); stackMain.pop(); } // 返回栈顶元素 public int top() { return stackMain.peek(); } // 返回最小值 public int min() { return stackMin.peek(); } }