链接:https://leetcode.cn/problems/bao-han-minhan-shu-de-zhan-lcof
题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
示例:
解题思路:
创建两个栈:stk和min_stk
stk:把所有元素都放入这个栈中。
min_stk:把入栈过程中,最小元素放入这个栈中。
代码:
class MinStack {
public:
/** initialize your data structure here. */
stack<int> stk, min_stk; //创建两个栈
MinStack() {}
void push(int x) {
stk.push(x); //直接将x放入stk栈就好
if(min_stk.empty() || min_stk.top() >= x) min_stk.push(x); //如果最小栈为空,或者最小栈的栈顶大于等于x,就将x也放入min_stk中
}
void pop() {
if(min_stk.top() == stk.top()) min_stk.pop();//两个栈顶元素相同,就都pop出来
stk.pop();
}
int top() {
return stk.top(); //直接把stk栈顶元素出栈即可
}
int min() {
return min_stk.top();//直接把min_stk栈顶元素出栈即可
}
};