题解 | #包含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(); }