前言
本周较忙,分享一道简单的题目。
作者水平有限,有任何问题欢迎在文章下方留言!
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
思路
我的想法是用两个栈,一个主栈用于存储数据,另一个辅助栈用于存储最小元素。
具体做法是:当每次主栈的最小元素变更时,就把新的最小元素压入辅助栈,这样,辅助栈的栈顶元素就是当前最小元素。当主栈把当前最小元素弹出时,把辅助栈的栈顶元素也弹出,然后辅助栈的栈顶元素就会变回上一个最小元素。
代码
以下是该思路的C++代码实现
class MinStack {
public:
stack <int> main_stack;
stack <int> min_stack;
MinStack() {
if (!main_stack.empty())
{
while(!main_stack.empty())
{
main_stack.pop();
}
}
if (!min_stack.empty())
{
while(!min_stack.empty())
{
min_stack.pop();
}
}
}
void push(int x) {
if (min_stack.empty())
{
min_stack.push(x);
}else{
if (x <= min_stack.top())
{
min_stack.push(x);
}
}
main_stack.push(x);
}
void pop() {
if (main_stack.empty())
{
return;
}else{
if (main_stack.top() == min_stack.top())
{
min_stack.pop();
}
main_stack.pop();
}
}
int top() {
return main_stack.top();
}
int min() {
return min_stack.top();
}
};