题解 | #包含min函数的栈#
包含min函数的栈
https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49
2022.0807算法第16题包含min函数的栈
算法要求min的复杂度为常数,刚开始想到了用一个变量存储min,存储时更新min没有问题,但是在pop删除操作时就比较麻烦了。
如果栈顶元素为最小值,删除之后的最小值就不知道了。
因此需要其他的结构存储最小值,可以使用一个辅助栈进行存储。
辅助栈里存储着当前栈元素的最小值,push操作一样,pop时只需要同样取出辅助栈的元素即可。
也就是以空间换时间的做法。
实现push函数:
当栈为空或者当前元素小于最小值时,更新辅助栈的值
否则直接将辅助栈的栈顶元素重复加入。
void push(int value) {
if(sta.empty()){
min_num.push(value);
}
else{
if(value<min_num.top())
min_num.push(value);
else
min_num.push(min_num.top());
}
sta.push(value);
}
pop函数、top函数和min函数比较简单,之间对两个栈进行操作就行;
void pop() {
sta.pop();
min_num.pop();
}
int top() {
return sta.top();
}
int min() {
return min_num.top();
}

