最小栈(栈)

这个题的思路就是用两个栈进行模拟,一个栈resource正常插入,删除。一个栈minval用来存目前栈中最小的数,将最小的数放在了该栈minval的顶部,这样可以直接取栈顶为最小元素。**要注意的是,栈中可能会有相同的元素,因此最小的元素也有可能相同,在向minval入栈时,相同的元素也要入栈,不仅仅是小于栈minval顶的元素,否则在删除时会出现错误。**所以在删除的时候也要判断,当前resource的栈顶是否与minval的栈顶相等,相等直接删除。

cpp 复制代码
class MinStack {
private:
    stack<int> source;
    stack<int> minval;
public:
    MinStack() {
        
    }
    
    void push(int val) {
        source.push(val);
        if(minval.empty() || minval.top()>=val) minval.push(val);
    }
    
    void pop() {
        int v=source.top();
        source.pop();
        if(minval.top() == v) minval.pop();
    }
    
    int top() {
        return source.top();
    }
    
    int getMin() {
        return minval.top();
    }
};
相关推荐
SWAGGY..17 分钟前
数据结构学习篇(10)--- 二叉树基础oj练习
数据结构·学习
千谦阙听21 分钟前
双链表:比单链表更高效的增删查改
数据结构·链表·visual studio
xie_pin_an1 小时前
从二叉搜索树到哈希表:四种常用数据结构的原理与实现
java·数据结构
栈与堆2 小时前
LeetCode 21 - 合并两个有序链表
java·数据结构·python·算法·leetcode·链表·rust
viqjeee2 小时前
ALSA驱动开发流程
数据结构·驱动开发·b树
XH华3 小时前
数据结构第九章:树的学习(上)
数据结构·学习
我是大咖4 小时前
二维数组与数组指针
java·数据结构·算法
爱编码的傅同学5 小时前
【今日算法】Leetcode 581.最短无序连续子数组 和 42.接雨水
数据结构·算法·leetcode
wm10436 小时前
代码随想录第四天
数据结构·链表
CoderCodingNo6 小时前
【GESP】C++六级考试大纲知识点梳理, (3) 哈夫曼编码与格雷码
开发语言·数据结构·c++