• c++:力扣,最小栈


    目录

    题目:

    解题思路:

    图解:

    代码:


    题目:

    设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

    实现 MinStack 类:

    MinStack() 初始化堆栈对象。
    void push(int val) 将元素val推入堆栈。
    void pop() 删除堆栈顶部的元素。
    int top() 获取堆栈顶部的元素。
    int getMin() 获取堆栈中的最小元素。
     

    示例 1:

    输入:
    ["MinStack","push","push","push","getMin","pop","top","getMin"]
    [[],[-2],[0],[-3],[],[],[],[]]

    输出:
    [null,null,null,null,-3,null,0,-2]

    解释:
    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.getMin();   --> 返回 -3.
    minStack.pop();
    minStack.top();      --> 返回 0.
    minStack.getMin();   --> 返回 -2.

    解题思路:

    因为题目已经把除了getmin函数外都给了我们,所以我们只需要思考如何取出当前栈中最小元素就可以了

    我们这里采取额外空间,即建立两个栈,一个按照正常顺序存储,一个一直存储最小值。

    图解:

    我们就拿例题来举例吧

     (1):设置一个最小值,保证后面存储在最小栈中的值为最小

    (2)-2>INT_MAX,存入最小值栈

     

    (3)0比-2大,所以最小值栈继续入-2,保证值最小

     

     

     (3)-3<-2,将-3入最小值栈中

     (4)如果pop的话,要两个栈都pop,不能只pop正常栈,要保证getmin获取的是剩下数中最小的

    错误的: 

     

    正确的:

     

     

     

     

    代码:

    1. class MinStack {
    2. stack<int> st;//正常栈
    3. stack<int> st_min;//存储最小值的栈
    4. public:
    5. MinStack() {
    6. st_min.push(INT_MAX);//初始化最小栈的值
    7. }
    8. void push(int val) {
    9. st.push(val);
    10. st_min.push(min(val,st_min.top()));//将最小值存储
    11. }
    12. void pop() {
    13. st.pop();
    14. st_min.pop();
    15. }
    16. int top() {
    17. return st.top();
    18. }
    19. int getMin() {
    20. return st_min.top();
    21. }
    22. };

  • 相关阅读:
    Cyclone DDS(初识)
    安装reids-stack docker 镜像
    关于go语言的那点事
    智能机器人代替人工真的有那么强大吗?
    windows下使用vs2010编译支持https的curl
    ubuntu 20.04安装 Anaconda教程
    前端体系中哪些发起异步请求的工具?
    luffy项目后端轮播图接口
    gateway动态网关/通用网关配置
    【java进阶03: package和import】及访问控制权限
  • 原文地址:https://blog.csdn.net/qq_62718027/article/details/125897236