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



#算法题#
全部评论

相关推荐

有工作后先养猫:太好了,是超时空战警,我们有救了😋
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务