剑指offer:包含min函数的栈

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。

思路分析

对于本题构造两个栈(stack和min)

push():向stack中压入元素时,如果stack为空压入的新数据小于等于min的栈顶元素时,将新数据压入min。

pop():如果stack弹出元素的值等于min的当前栈顶元素,则弹出min的当前栈顶元素。

top():最后一个压入的数据,直接返回stack的栈顶元素。

min():压入的数据中的最小数据,直接返回min的栈顶元素。

    import java.util.Stack;

    public class Solution {

        Stack<Integer> stack = new Stack<>();
        Stack<Integer> minStack = new Stack<>();

        public void push(int node) {
            //stack为空,将元素压入min 或者  node小于等于min的栈顶元素
            //压入12333 等号保证压入12333而不是123
            if(stack.isEmpty() || node <= minStack.peek()){ 
                minStack.push(node);
            }
            stack.push(node);
        }

        public void pop() {
            //stack弹出的元素 等于 min的栈顶元素
            if(stack.pop() == minStack.peek()){
                minStack.pop();
            }
        }
		//最后一个压入的数据
        public int top() {
            return stack.peek(); 
        }
		//压入的数据中的最小数据
        public int min() {
            return minStack.peek(); 
        }
    }
posted @ 2020-03-04 14:39  灵图  阅读(92)  评论(0)    收藏  举报