题解 | #包含min函数的栈#
包含min函数的栈
http://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49
队列和栈 第二题 注意考虑什么时候要更新最小值 简单
class Solution {
public:void push(int value) {
// 压入的时候 发现小于原先最小的 就更新最小的值
// 就是直接push
if(value<minnum)
minnum=value;
a.push(value);
}
void pop() {
// 先把要扔掉的扔掉
// 判断要pop出去的是不是最小值
int temp=a.top();
a.pop();
// pop出去的不是最小值 不用处理
if(temp != minnum){
return;
}
// pop出去的是最小值 此时 要去重新更新最小值
// 因为栈的特性 如果想要遍历一遍 每个点都会被扔掉
// 所以 在这里 需要另一个栈来临时保存结果
// 遍历 找最小值 再把栈还原
stack<int> b;
temp=20000;
while(!a.empty())
{
temp=a.top() < temp? a.top():temp;
b.push(a.top());
a.pop();
}
minnum = temp;
while(!b.empty())
{
a.push(b.top());
b.pop();
}
}
int top() {
// 只是输出栈顶的值 不会影响栈 无所谓
return a.top();
}
int min() {
// 只是输出最小的值 不会影响栈 无所谓
return minnum;
}
stack<int> a;
int minnum=20000;
};
题解 文章被收录于专栏
一遍做剑指offer 一边保存做题步骤 并附带详细注释哦