当前位置: 首页 > article >正文

LeetCode155. 最小栈(2024冬季每日一题 12)

设计一个支持 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.

提示:

− 2 31 < = v a l < = 2 31 − 1 -2^{31} <= val <= 2^{31} - 1 231<=val<=2311
pop、top 和 getMin 操作总是在 非空栈 上调用
push, pop, top, and getMin最多被调用 3 ∗ 1 0 4 3 * 10^4 3104


思路:

  • 模拟栈 + 使用一个m数组记录当前位置左边最小的数(包括当前元素)
  • 使用模拟栈时,最右边的元素,就是栈顶元素
  • 求栈中最小的值,也就是求栈顶左边最小的数(包括栈顶元素),只需要返回 m[tt] 即可
class MinStack {
public:
    int stk[30010];
    int m[30010];
    int tt = -1;
    MinStack() {
        tt = -1;
    }
    
    void push(int val) {
        stk[++tt] = val;
        if(!tt) m[tt] = val;
        else m[tt] = min(stk[tt], m[tt-1]);
    }
    
    void pop() {
        tt--;
    }
    
    int top() {
        return stk[tt];
    }
    
    int getMin() {
        return m[tt];
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(val);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */

http://www.kler.cn/a/408562.html

相关文章:

  • SATA接口不通分析案例分享
  • Android Binder技术概览
  • 区块链讲解
  • 自动驾驶概念
  • Linux进程管理查找相关命令
  • 太通透了,Android 流程分析 蓝牙enable流程(应用层/Framework/Service层)
  • mybatis学习(三)
  • AWS codebuild + jenkins + github 实践CI/CD
  • C++从零到满绩——类和对象(中)
  • Tkinter置顶弹窗提示操作成功
  • rabbitmq结合springboot配置发送消息和消费消息
  • 监控报警系统的指标、规则与执行闭环
  • `--version` 选项在 Java 8 中是不被支持的。Java 8 使用的是 `-version` 选项而不是 `--version`
  • Go语言获取客户端真实IP
  • PowerMILL 客制化宏 - 概念
  • 功能强大的stringstream类
  • Kotlin Multiplatform 未来将采用基于 JetBrains Fleet 定制的独立 IDE
  • STM32定时器原理及应用
  • Spring 框架环境搭建
  • 改错题总结
  • 6-自定义fprint函数 --github_com_fatih_color测试
  • 【初阶数据结构与算法】线性表之队列的定义与实现
  • HarmonyOS:使用ArkWeb构建页面
  • 手搓《unordered_map unordered_set》
  • 《第十部分》1.STM32之通信接口《精讲》之IIC通信---介绍
  • 用 BlockingQueue 打造轻量级消息队列服务:从原理到实现