题解 | #包含min函数的栈#
包含min函数的栈
http://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49
使用两个栈:
一个栈存值。例如 push 1, push -1, push 2,对应的栈就是 [1, -1, 2]
另一个栈存min值。例如 push 1, push -1, push 2,对应的栈是 [1, -1, -1]
min栈存入的时候,需要看是不是比栈顶的元素小,选择小的元素入栈,当pop的时候,两个栈一起出就就可以了。
import java.util.Stack; import java.math.*; public class Solution { private Stack<Integer> valStack = new Stack<>(); private Stack<Integer> minStack = new Stack<>(); public void push(int node) { valStack.push(node); if (minStack.isEmpty()) { minStack.push(node); } else { int top = minStack.peek(); int min = Math.min(top, node); minStack.push(min); } } public void pop() { valStack.pop(); minStack.pop(); } public int top() { return valStack.peek(); } public int min() { return minStack.peek(); } }