LeetCode HOT100 - 最小栈

栈如果用 vector 去模拟的话实际上也是往一个数组的末尾不断插入元素

如果出栈的话也就是删除末尾的元素

因此这题的目的实际上就是访问数组的前缀最小值,而且不会有修改操作

于是只要在每次添加元素的时候记录此时的最小值即可

采用两个 stack 或者 stack 内存储的是 pair 之类的类型均可行

#include<bits/stdc++.h>

class MinStack {
    stack<array<int, 2>> st;
public:
    MinStack() {
        st.push({0, INT_MAX});
    }
    
    void push(int val) {
        st.push({val, min(st.top()[1], val)});
    }
    
    void pop() {
        st.pop();
    }
    
    int top() {
        return st.top()[0];
    }
    
    int getMin() {
        return st.top()[1];
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(val);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */
posted @ 2026-03-19 20:16  rdcamelot  阅读(16)  评论(0)    收藏  举报