剑指 Offer 30 包含min函数的栈

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

标签:剑指 Offer发布于:编辑于:浏览量:1424

概述

https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/

https://leetcode.com/problems/min-stack/

双栈法

题目就算让我们在标准的栈上使其支持 O(1) 的最小值查询。

我们采用双栈,一个栈用于记录压入的数据,另一个用于记录当前最小值。

class MinStack {
public:
    stack<int> a;
    stack<int> b;
    MinStack() {
        
    }
    
    void push(int val) {
        a.push(val);
        if (b.empty() || val < b.top()) {
            b.push(val);
        } else {
            b.push(b.top());
        }
    }
    
    void pop() {
        a.pop();
        b.pop();
    }
    
    int top() {
        return a.top();
    }
    
    int getMin() {
        return b.top();
    }
};