栈和队列——包含min函数的栈

实现一个特殊的栈, 在实现栈的基本功能的基础上, 再实现返
回栈中最小元素的操作。
【要求】
1. pop、 push、 getMin操作的时间复杂度都是O(1)。
2. 设计的栈类型可以使用现成的栈结构。

包含min函数的栈

自已以前的思路就是,每次getMin()函数时,就准备一个备用栈,将数据栈中的元素依次出栈到备用栈中,期间记录下最小元素,然后将备用栈中的元素依次弹回到数据栈中。

 

别人的思路,也是准备两个栈,一个数据栈dataStack,一个最小元素栈minStack,每次有元素入栈时,比较最小元素栈的栈顶peek,若小于,则将最小元素压入minStack中,否则将栈顶元素再次压入栈中

出栈时,左右两边 一起出栈。

 

package stackQueue;

import java.util.Stack;

/**
 * Created by Skye on 2018/4/5.
 */
public class StackOfMin {

    private Stack<Integer> dataStack;
    private Stack<Integer> minStack;

    public StackOfMin() {
        this.dataStack = new Stack<>();
        this.minStack = new Stack<>();
    }


    public void push(int num){
        if(minStack.empty() || minStack.peek() > num){
            minStack.push(num);
        }else{
            int min = minStack.peek();
            minStack.push(min);
        }
        dataStack.push(num);
    }

    public int pop(){
        if(dataStack.empty()){
            throw new RuntimeException( "stack is empty" );
        }
        minStack.pop();
        return dataStack.pop();
    }

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

  

转载于:https://www.cnblogs.com/SkyeAngel/p/8723098.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值