zoukankan      html  css  js  c++  java
  • 栈和队列----设计一个有getMin功能的栈

    设计一个有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();
        }
    }
  • 相关阅读:
    求取32位无符号整数中最低位位值为1的位置 && 求取32位无符号整数中最高位位值为1的位置
    交换寄存器中的相应字段
    NDK与JNI
    plt_0
    32位无符号整数平方根
    提取 主 设备号
    爱江山更爱美人
    mysql oracle sqlserver 数据库分页
    详解JDBC驱动的四种类型
    oracle sqlplus 中的清屏命令
  • 原文地址:https://www.cnblogs.com/Demrystv/p/9279788.html
Copyright © 2011-2022 走看看