剑指offer 20.包含min 函数的栈

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 }

猜你喜欢

转载自www.cnblogs.com/hi3254014978/p/12584486.html
今日推荐