怎么实现一个最小栈?

实现一个栈,该栈带有出栈(pop)、入栈(push)、取最小元素(getMin)3个方法。要保证这3个方法的时间复杂度都是O(1)。

如果用一个变量 m 保存栈的最小值,我们模拟一下入栈

貌似没什么问题,此时从栈顶到栈底依次为 0 2 1,

再模拟一下出栈

由此可知,我们只记下最小值还不够,还要记下次小值,次次小值。

方便最小值出栈时,次小值上位成为最小值。

我们可以用另一个栈(B)来保存这些”较小值“,如果此时入栈的元素比栈B的栈顶元素小,及可入栈到栈B,则栈B的栈顶元素就是栈的最小值。

最小栈

#include


class MinStack {
private:
    stack stackA, stackB;
public:
    MinStack() {}
    ~MinStack() {}

    void push(int n) {
        stackA.push(n);
        if (stackB.empty() || n <= stackB.top()) {
            stackB.push(n);
        }
    }

    void pop() {
        if (stackA.top() == stackB.top()) {
            stackB.pop();
        }
        stackA.pop();
    }

    int top() {
        return stackA.top();
    }

    int getMin() {
        return stackB.top();
    }
};
展开阅读全文

页面更新:2024-03-18

标签:最小   复杂度   由此可知   上位   变量   元素   没什么   时间   方法   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top