20.包含min 函数的栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
思路:
1. 定义两个栈,一个 stack 栈用于存储栈的元素,另一个 minStack 栈用来存储最小的元素
2. 每当push 一个元素,相应的push 一个当前最小的元素到 minStack 中,这样栈中的每个元素都对应着一个最小值
3. 每当pop 一个元素,同时pop minStack 中的一个元素
4. top()函数返回stack的栈顶值,min()函数返回 minStack 的栈顶值
1 import java.util.Stack; 2 3 public class Solution { 4 public Stack<Integer> stack = new Stack<Integer>(); 5 public int MIN = 1 << 30; 6 public Stack<Integer> minStack = new Stack<Integer>(); 7 8 public void push(int node) { 9 if(MIN > node){ 10 MIN = node; 11 } 12 stack.push(node); 13 minStack.push(MIN); 14 } 15 16 public void pop() { 17 // 如果栈不为空,两个栈同时pop 18 if(!stack.isEmpty()){ 19 stack.pop(); 20 minStack.pop(); 21 } 22 } 23 24 public int top() { 25 return stack.peek(); 26 } 27 28 public int min() { 29 return minStack.peek(); 30 } 31 }