无力吐槽,翻了前面这么多题解没一个是按照题目要求写算法的,居然运行时间能在 10ms 以内,真是奇迹。
维护两个栈,一个维护编号本身,以下称为栈;一个维护编号前缀最小值,以下称为最小栈。于是就可以常数时间实现所有操作了。
class Solution {
vector<int> stk;
vector<int> minStk;
public:
void push(int value) {
stk.push_back(value);
minStk.push_back(minStk.empty() ? value : ::min(minStk.back(), value));
}
void pop() {
stk.pop_back();
minStk.pop_back();
}
int top() {
return stk.back();
}
int min() {
return minStk.back();
}
};

京公网安备 11010502036488号