1 栈与队列
1.1 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数
在该栈中,调用min、push和pop方法
要求时间复杂度均为O(1)
算法思想:
-
要求时间复杂度均为 O(1),增加辅助空间实现,即增加一个辅助栈存储min值
-
例如:data 中依次入栈 5, 4, 3, 8, 10, 11, 12, 1, 则 min 中依次入栈 5, 4, 3,no,no, no, no, 1。
-
no 代表此次不入栈,如果 min 中入栈的元素小于等于栈顶元素则入栈,否则不入栈。
1 import java.util.Stack; 2 public class Main 3 { 4 Stack<Integer> stack = new Stack<>(); 5 Stack<Integer> minStack = new Stack<>(); 6 public void push(int node) 7 { 8 stack.push(node); 9 if(minStack.isEmpty() || minStack.peek() >= node) 10 minStack.push(node); 11 } 12 public void pop() 13 { 14 stack.pop(); 15 if(stack.peek() == minStack.peek()) 16 { 17 minStack.pop(); 18 } 19 } 20 public int top() 21 { 22 return stack.peek(); 23 } 24 public int min() 25 { 26 return minStack.peek(); 27 } 28 }