zoukankan      html  css  js  c++  java
  • <剑指offer> 第18题

    题目:

    定义栈的数据结构,在该类型中实现一个能够找到栈的最小数的min函数,在该栈中,调用min,push,pop的时间复杂度都是O(1)

    思路:

    把每次的最小元素(之前的最小元素和新压入栈的元素两者的较小值)都保存起来放到另外一个辅助栈里。

    如果每次都把最小元素压入辅助栈,那么就能保存辅助栈的栈顶一直都是最小元素,当最小元素从数据栈内被弹出之后,同时弹出辅助栈的栈顶元素,此时辅助栈的新栈顶元素就是下一个最小值

    代码实现:

    import java.util.Stack;
    
    public class Eighteenth {
        private Stack<Integer> stack = new Stack<>();
        private Stack<Integer> minStack = new Stack<>();
        
        public void push(int data){
            stack.push(data);
            if(minStack.size() == 0 || data < minStack.peek()){
                minStack.push(data);
            }else{
                minStack.push(minStack.peek());
            }
        }
        
        public int pop() throws Exception{
            if(stack.size() == 0){
                throw new Exception("栈已为空");
            }
            int data = stack.pop();
            minStack.pop();
            return data;
        }
        
        public int min() throws Exception{
            if(stack.size() == 0){
                throw new Exception("栈已为空");
            }
            return minStack.peek();
        }
    }
  • 相关阅读:
    [Kafka]
    [Kafka]
    [数据挖掘]
    接口部署说明
    报表部署安装说明
    kafka单机安装测试-原创-本机测试过
    centos安装nginx 带upstream
    spring boot jpa mysql porm文件备份 可以运行的
    Spring boot jpa mysql 连接数据库SSL错误
    mysql 学习笔记
  • 原文地址:https://www.cnblogs.com/HarSong13/p/11330712.html
Copyright © 2011-2022 走看看