题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
解析:
使用两个桟,一个桟stk存储数据,另一个桟minstk存储min值,min值是数据入stk桟时,若minstk开始为空时,则直接入栈,若数据小于minstk栈顶元素,则该min值就入桟minstk。这样最终minstk栈顶元素为所有数据中的最小值。
例如:
stk中依次入栈,
5
,
4
,
3
,
8
,
10
,
11
,
12
,
1
则minstk依次入栈,
5
,
4
,
3
,no,no,
no, no,
1
no表示此次不入栈。
代码如下:
class Solution {
public:
void push(int value) {
stk.push(value);
if(minstk.empty())
minstk.push(value);
else if(value<minstk.top())
minstk.push(value);
}
void pop() {
if(stk.top()==minstk.top())
minstk.pop();
stk.pop();
}
int top() {
return stk.top();
}
int min() {
return minstk.top();
}
private:
stack<int> stk;
stack<int> minstk;
};