[leetcode]Min Stack

题目描述如下:

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.

push, pop操作stack内置,top函数相当于内置的peek函数,主要要解决的就是如何得到栈内最小的数。

第一次用的方法是每一次调用getMin函数时遍历stack(所谓的遍历就是新建一个tmp栈作为过渡,数据来回倒转一下),但这样暴力的方法在最后一个大的数据输入时TLE(当时也就抱着试试的想法)。

那就要求我们保留最小值的序列了,想到的是在其中内置一个stack记录的永远是当前所有元素中最小的,代码如下:

class MinStack {

    private Stack<Integer> stack;
    private Stack<Integer> storeMinValue;

    MinStack(){
        stack = new Stack<Integer> ();
        storeMinValue = new Stack<Integer> ();
    }

    public void push(int x) {
        stack.push(x);
        if(storeMinValue.isEmpty() || storeMinValue.peek() >= x)
            storeMinValue.push(x);
    }

    public void pop() {
        if(stack.peek().equals(storeMinValue.peek()))
            storeMinValue.pop();
        stack.pop();
    }

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

    public int getMin() {
        return storeMinValue.peek();
    }
}

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

你可能感兴趣的:(LeetCode)