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

栈和队列----设计一个有getMin功能的栈

时间:2018-07-08 14:43:44      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:相对   ack   import   ==   复杂   create   throw   code   exception   

设计一个有getMin功能的栈

 

设计一个具有getMin功能的栈,可以返回栈中的最小的元素,可以使用现有的栈的数据结构,要求pop/push/getMin操作的时间复杂度是O(1)。

 

package com.test;

import java.util.Stack;

/**
 * Created by Demrystv.
 */
public class GetMinStack {
    //定义两个栈,一个存放正常的数据,一个存放最小值
    Stack<Integer> stackData = new Stack<Integer>();
    Stack<Integer> stackMin = new Stack<Integer>();

    //在入栈时,如果stackMin是空,同步压入,
    //如果不是空,但是新元素小于等于stackMin的栈顶元素,也同步压入
    //如果不是空,新元素大于stackMin的栈顶元素,就不压入 stackMin
    //这样就可以保证stackMIn中的元素依次减少
    public void push(int newNum){
        if(stackMin.isEmpty()){
            stackMin.push(newNum);
        }else if (newNum<=stackMin.peek()){
            stackMin.push(newNum);
        }
        stackData.push(newNum);
    }

    //出栈和入栈是相对应的
    //stackData中的栈顶元素只会大于等于stackMin栈顶元素
    //如果大于,只弹出stackData的栈顶元素,如果等于,两个的栈顶元素都要弹出
    public int pop(){
        if(stackData.isEmpty()){
            throw new RuntimeException("Your stack is empty.");
        }
        int value = stackData.pop();
        if(value==stackMin.peek()){
            stackMin.pop();
        }
        return value;
    }

    public int getMin(){
        if(stackMin.isEmpty()){
            throw new RuntimeException("Your stack is empty.");
        }
        return stackMin.peek();
    }
}

 

栈和队列----设计一个有getMin功能的栈

标签:相对   ack   import   ==   复杂   create   throw   code   exception   

原文地址:https://www.cnblogs.com/Demrystv/p/9279788.html

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