• 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. };

  • 相关阅读:
    如何提高视频清晰度?视频调整清晰度操作方法
    Three.js 打造缤纷夏日3D梦中情岛 🌊
    什么是GPT-4
    Spring Boot Actuator的常见Endpoint
    强化科技创新“辐射力”,中国移动的数智化大棋局
    目标检测算法——YOLOv5结合轻量化网络MobileNetV3
    禅道的原理及应用详解(一)
    【玩转CSS】盒子模型
    magento1.x多域名部署可行性方案
    DVWA靶场搭建
  • 原文地址:https://blog.csdn.net/qq_62718027/article/details/125897236