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();
        }
    }
  • 相关阅读:
    PHPEXCEL 导出多个sheet
    android adb.exe端口占用
    imageview 显示assets的图片

    Java中日期问题
    java中的定时器的实现样例
    Oracle数据库如何干净的删除
    MySQL索引相关知识
    JavaScript基础知识总结
    JDBC技术总结
  • 原文地址:https://www.cnblogs.com/HarSong13/p/11330712.html
Copyright © 2011-2022 走看看