剑指offer_包含 min 函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))
可以建立两个栈一个栈是数据结构,一个栈存最小值
1 import java.util.Stack; 2 3 public class Solution { 4 Stack<Integer> stack = new Stack<>(); 5 Stack<Integer> stackmin = new Stack<>(); 6 public void push(int node) { 7 int temp = stack.push(node); 8 if(stackmin.isEmpty()){ 9 stackmin.push(temp); 10 }else if(stackmin.peek() >= temp){ 11 stackmin.push(temp); 12 } 13 } 14 15 public void pop() { 16 int temp = stack.pop(); 17 if(temp==stackmin.peek()){ 18 stackmin.pop(); 19 } 20 } 21 22 public int top() { 23 return stack.peek(); 24 } 25 26 public int min() { 27 return stackmin.peek(); 28 } 29 }
这个方法有个缺点就是当前不是最小值的时候没存,于是每次pop的时候都必须比较一下再pop。
可以改进一下。stackmin每次存的都是当前最小值,每次pop也是当前最小值。
1 import java.util.Stack; 2 3 public class Solution { 4 Stack<Integer> stack = new Stack<>(); 5 Stack<Integer> stackmin = new Stack<>(); 6 public void push(int node) { 7 int temp = stack.push(node); 8 if(stackmin.isEmpty()){ 9 stackmin.push(temp); 10 }else if(stackmin.peek() >= temp){ 11 stackmin.push(temp); 12 }else{ 13 stackmin.push(stackmin.peek()); 14 } 15 } 16 17 public void pop() { 18 stack.pop(); 19 stackmin.pop(); 20 } 21 22 public int top() { 23 return stack.peek(); 24 } 25 26 public int min() { 27 return stackmin.peek(); 28 } 29 }

浙公网安备 33010602011771号