zoukankan      html  css  js  c++  java
  • 剑指offer 30:包含min 函数的栈

    package com.example.lettcode.offer;
    
    import java.util.Stack;
    
    /**
     * @Class MinStack
     * @Description 剑指offer 30 包含min 函数的栈
     * 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,
     * 调用 min、push 及 pop 的时间复杂度都是 O(1)。
     * 示例:
     * MinStack minStack = new MinStack();
     * minStack.push(-2);
     * minStack.push(0);
     * minStack.push(-3);
     * minStack.min();   --> 返回 -3.
     * minStack.pop();
     * minStack.top();      --> 返回 0.
     * minStack.min();   --> 返回 -2.
     * @Author
     * @Date 2020/7/17
     **/
    public class MinStack {
    
        // 保存入栈的元素
        public Stack<Integer> data;
        // 保存最小元素
        public Stack<Integer> min;
    
        /**
         * initialize your data structure here.
         */
        public MinStack() {
            data = new Stack<>();
            min = new Stack<>();
        }
    
    
        /** 定义两个stack,一个为存放最小数的序列的辅助栈。
         * 压栈时,先将元素 x 压入 stack1。然后判断 stack2 的情况:
         * stack2 栈为空或者栈顶元素大于 x,则将 x 压入 stack2 中。
         * stack2 栈不为空且栈定元素小于 x,则重复压入栈顶元素。
         * 获取最小元素时,从 stack2 中获取栈顶元素即可。
         **/
        public void push(int x) {
            // min 栈保存的一直是date栈中入栈时的最小元素,两个栈的个数相同
            // add是继承自Vector的方法,且返回值类型是boolean。
            // push是Stack自身的方法,返回值类型是参数类类型。
            data.push(x);
            if (min.size() == 0 || min.peek() > x) {
                min.push(x);
            }else {
                min.push(min.peek());
            }
        }
    
        public void pop() {
            // pop()函数返回栈顶的元素,并且将该栈顶元素出栈。
            data.pop();
            min.pop();
        }
    
        public int top() {
            // peek()函数返回栈顶的元素,但不弹出该栈顶元素。
            return data.peek();
        }
    
        public int min() {
            return min.peek();
        }
    }
    
    // 测试用例
    public static void main(String[] args) {
    	MinStack minStack = new MinStack();
    	minStack.push(-2);
    	minStack.push(0);
    	minStack.push(-3);
    	System.out.println(minStack.min());
    	minStack.pop();
    	System.out.println(minStack.top());
    	System.out.println(minStack.min());
    }
    
  • 相关阅读:
    城市漫游-牛客
    同步和阻塞理解
    避免用户多次点击,造成重复提交
    页面不可编辑
    正则表达式-简单实例
    从字符串提取一个列表
    JS对象、基本类型和字面量的区别
    本地数据访问时出现跨域问题Cross origin requests are only supported for protocol schemes: ……
    checkbox操作判断 Jquery选择器
    HTML5经典实例——1基础语法和语义
  • 原文地址:https://www.cnblogs.com/fyusac/p/13330231.html
Copyright © 2011-2022 走看看