算法:包含min函数的栈
包含min函数的栈
包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
分析
设定两个栈stack和minStack
- 入栈: 如果当前minStack为空或者入栈元素小于等于栈顶元素则入minStack; 而stack无论何时都会入栈
- 出栈: 如果当前出栈元素为minStack.peak, 则minStack出栈; 而stack无论何时都会出栈;
由于以上两点, 保证了minStack.peak即为当前栈中的min
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| import java.util.Stack;
public class Solution {
private static Stack<Integer> stack;
private static Stack<Integer> minStack;
static { stack = new Stack<>(); minStack = new Stack<>(); }
public void push(int node) { stack.push(node); if (minStack.isEmpty() || node <= minStack.peek()) { minStack.push(node); } }
public void pop() { if (stack.peek() == minStack.peek()) { minStack.pop(); } stack.pop(); }
public int top() { return stack.peek(); }
public int min() { return minStack.peek(); } }
|