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();
        }
    }
  • 相关阅读:
    ScrollVIew 边界阴影效果
    android 开发 常用工具类
    alertdialog.builder 自定义弹窗
    垂直的seekbar
    SlideSwitch
    [转]Android_气泡效果
    ListView 滚回顶部
    04_dljd_mysql登录和退出
    03_dljd_启动和关闭mysql服务
    02_dljd_mysql数据库的下载、安装与卸载
  • 原文地址:https://www.cnblogs.com/HarSong13/p/11330712.html
Copyright © 2011-2022 走看看