题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
class Solution {
public:
//每个函数其实都是数据段的功能函数(非底层实现的那种功能,也就是单纯地调用API),在这基础上实现了min()功能。
void push(int value) //实现了两个栈的压入功能
{
data_stack.push(value);//当数据栈增加一个值时,辅助栈也要增加一个值。
if(min_stack.empty()||min_stack.top()>value)//辅助栈为空或value小于辅助栈栈顶元素时,增加value。
min_stack.push(value);
else
min_stack.push(min_stack.top());//value大于/等于辅助栈栈顶元素时,增加辅助栈栈顶元素。
}
void pop() //实现了两个栈的弹出功能
{
data_stack.pop();
min_stack.pop();
}
int top() //实现了数据栈的栈顶功能
{
return data_stack.top();
}
int min() //实现了得到两个栈当前的最小元素
{
return min_stack.top();
}
private:
stack<int> data_stack;//数据栈
stack<int> min_stack;//辅助栈
};