题解 | #包含min函数的栈#
包含min函数的栈
https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49
import java.util.*; import java.util.Stack; public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { if (stack1.isEmpty() && stack2.isEmpty() ) { stack1.push(node); stack2.push(node); } else { stack1.push(node); } if (node <= stack2.peek()) { stack2.push(node); } } public void pop() { if (stack1.peek().equals(stack2.peek())) { stack2.pop(); } stack1.pop(); } public int top() { return stack1.peek(); } //top min才有返回值. public int min() { return stack2.peek(); } }
- 使用两个栈,一个记录全部,一个记录最小值.
- 第二个栈顶部代表着第一个栈的最小值.push数据的时候,检查新的数据比第二个栈更小才都入栈.
- 如果去除数据的时候,去除第一个栈的数据记得去除一样的第二个栈的数据.