随笔-最小栈

版权声明:中华人民共和国持有版权 https://blog.csdn.net/Fly_Fly_Zhang/article/details/85267018

题目:

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

push(x) – 将元素 x 推入栈中。
pop() – 删除栈顶的元素。
top() – 获取栈顶元素。
getMin() – 检索栈中的最小元素。
示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.

思路:和普通栈只有一点不同 那就是每次入栈两个元素,一个保存当前值,一个保存当前栈中元素的最小值,相对的,出栈的时候需要出栈两个元素。

class MinStack {
    private int top;
    private int [] elem;
    /** initialize your data structure here. */
    public MinStack() {
        this.top=0;
        this.elem=new int[10];
       
    }
    public boolean isFull(){
        if(top==elem.length)
            return true;
        return false;
    }
    public void push(int x) {
  
        if(isFull()){
            elem=Arrays.copyOf(elem,2*elem.length);
        }
        if(top==0){
            elem[top++]=x;
        }else if(elem[top-2]<x){
            elem[top]=elem[top-2];   //这个地方需要注意,两边都用top来确定,左边就不能用top++  否则会影响右边的赋值
            top++;
        }else{
            elem[top++]=x;
        }
        elem[top++]=x;
    }
    public boolean isEmpty(){
        if(top==0)
            return true;
        return false;
    }
    public void pop() {
        top-=2;
    }
    
    public int top() {
     
        return elem[top-1];
    }
    
    public int getMin() {
     
        return  elem[top-2];
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(x);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

猜你喜欢

转载自blog.csdn.net/Fly_Fly_Zhang/article/details/85267018