155. 最小栈---栈(Java)

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。
请添加图片描述


import java.util.Stack;

public class LeetCode155 {

    static class MinStack{
		//存储所有的数据
        Stack<Integer> stack = new Stack<>();
		//用来存储最小的数据
        Stack<Integer> minStack = new Stack<>();

        public void push(int val){
			//数据正常入栈
            stack.push(val);
			//如果minStack不为空,就要比较一下要当前要入栈的数据val和minStack里的数据num,如果val比较小就把它压入栈中,如果minStack为空,直接入栈就行
            if(!minStack.isEmpty()){
                int num = minStack.peek();
                if(val <= num){
                    minStack.push(val);
                }
            }else {
                minStack.push(val);
            }
        }

        public void pop(){
		  //出栈的时候,如果出栈的这个数,两个栈都有,就需要把它们都出栈了
          int a =  stack.peek();

          int b = minStack.peek();

          if (a == b){
              stack.pop();
              minStack.pop();
          }else{
              stack.pop();
          }

        }
        public int top(){
			//栈顶元素,直接从stack里取就行了
            return stack.peek();

        }
        public int getMin(){
			//最小元素从minStack直接取
            return minStack.peek();

        }
    }
    public static void main(String[] args) {
		//测试代码
        MinStack minStack = new MinStack();

        minStack.push(-2);

        minStack.push(0);

        minStack.push(-3);

        System.out.println(minStack.getMin());

        minStack.pop();

        System.out.println(minStack.getMin());

        System.out.println(minStack.top());
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值