LeetCode 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.

算法思想:

这个可以使用栈来实现,但是存入栈中的是与最小值的差值,这样就可以在常量时间内来获取栈中最小值。

源代码

class MinStack {
public:
    /** initialize your data structure here. */
     long min;
     stack<long> S;

    MinStack() {

    }

    void push(long x) {
        if(S.empty())
        {
           S.push(0L);
            min = x;
        }
        else
        {
           S.push(x - min);
            if(x < min)
                min = x;
        }

    }

    void pop() {
       if(S.empty())
           return;
        else
        {
            long pop = S.top();
            S.pop();
            if(pop < 0)
                min -= pop;
        }
    }

    int top() {
       long top = S.top();
        if(top > 0)
        {
            return (top + min);
        }
        else
        {
            return (int)min;
        }
    }

    int getMin() {
        return (int)min;
    }
};

/** * 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(); */
点赞