155. Min Stack

155. Min Stack

题目链接:https://leetcode.com/problems/min-stack/description/

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • push(x) – Push element x onto stack.
  • pop() – Removes the element on top of the stack.
  • top() – Get the top element.
  • getMin() – Retrieve the minimum element in the stack.

Example:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> Returns -3.
minStack.pop();
minStack.top();      --> Returns 0.
minStack.getMin();   --> Returns -2.
方法一:private Stack<Integer> stack=new Stack<Integer>();
    private Stack<Integer> minstack=new Stack<Integer>();
    public void push(int x) {
        if(minstack.isEmpty()||x<=minstack.peek()) 
            minstack.push(x);
        stack.push(x);
    }

    public void pop() {
       if(stack.peek().equals(minstack.peek()))    //此处使用==号不行
           minstack.pop();
       stack.pop();
    }

    public int top() {
        return stack.peek();
    }

    public int getMin() {
        return minstack.peek();
    }
    /*
 * 1.对于基本数据类型:equals和"=="的区别
 * (1)"=="比较的是两个变量的数值是否相等;
 * (2)"equals"不能用于基本数据类型,只能用于对象数据类型,必须使用对应的包装类。
 * 2.对于对象变量:equals和"=="的区别
 * (1)“=="比较的是对象变量(存放于栈内存)存放对象的堆内存地址,比较的是地址;
 * (2)“equals”比较的是两个对象的内容是否相同。
 * 3.java类都继承Object超类,在Object类中equals和"=="是一样的,没有区别,而在String,Integer等类中重写了equals方法,才使得equals和“==不同”
 *所以,当自己创建一个类时,自动继承了Object的equals方法,要想实现不同的比较,必须重写equals方法。
 * */
方法2:使用ArraList实现栈
ArrayList<Integer> stack=new ArrayList<Integer>();
        ArrayList<Integer> minstack=new ArrayList<Integer>();
        public void push(int x){
            stack.add(x);
            if(minstack.isEmpty()||x<=minstack.get(minstack.size()-1))
                minstack.add(x);
        }
        public void pop(int x){
            if(stack.isEmpty())
                return;
            int temp=stack.remove(stack.size()-1);    //移除stack的栈顶元素
            if(!minstack.isEmpty()&&temp==minstack.get(minstack.size()-1))
                minstack.remove(minstack.size()-1);   
        }
        public int top(int x){
            if(!stack.isEmpty())
                return stack.get(stack.size()-1);
            return 0;
        }
        public int getMin() {
             if(!minstack.isEmpty())
                 return minstack.get(minstack.size()-1);
             return 0;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值