剑指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 }

 

posted @ 2019-08-31 09:33  chyblogs  阅读(129)  评论(0)    收藏  举报