码迷,mamicode.com
首页 > 其他好文 > 详细

<剑指offer> 第18题

时间:2019-08-10 12:09:31      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:==   util   code   题目   最小   stack   数据   bsp   保存   

题目:

定义栈的数据结构,在该类型中实现一个能够找到栈的最小数的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();
    }
}

 

<剑指offer> 第18题

标签:==   util   code   题目   最小   stack   数据   bsp   保存   

原文地址:https://www.cnblogs.com/HarSong13/p/11330712.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!