86 最小栈

news2024/9/26 3:21:16

最小栈

    • 题解1 STL大法好
    • 题解2 辅助最小栈(直观,空间换时间)
    • 题解3 不需要额外空间(!!!差值!!!)

设计一个支持 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 -2^{31} 231 <= val <= 2 31 − 1 2^{31} - 1 2311
  • pop、topgetMin 操作总是在 非空栈 上调用
  • push, pop, top, and getMin最多被调用 3 * 1 0 4 10^4 104

题解1 STL大法好

class MinStack {
    deque<int> stk; 
public:
    MinStack() {
    }
    
    void push(int val) {
        stk.push_back(val);
    }
    
    void pop() {
        stk.pop_back();
    }
    
    int top() {
        return stk.back();
    }
    
    int getMin() {
    // 这里是重点
        return *min_element(stk.begin(), stk.end());
    }
};

/**
 * 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();
 */

在这里插入图片描述

题解2 辅助最小栈(直观,空间换时间)

class MinStack {
    stack<int> stk; 
    stack<int> minstk;
public:
    MinStack() {
       minstk.push(INT_MAX);
    }
    
    void push(int val) {
        stk.push(val);
        minstk.push(min(val, minstk.top()));
    }
    
    void pop() {
        stk.pop();
        minstk.pop();
    }
    
    int top() {
        return stk.top();
    }
    
    int getMin() {
        return minstk.top();
    }
};

在这里插入图片描述

题解3 不需要额外空间(!!!差值!!!)

class MinStack {
	// 注意long
    stack<long> stk; 
    long minstk;
public:
    MinStack() {
       minstk = -1;
    }
    
    void push(int val) {
        if(stk.empty()){
            // 设第一个进栈的数为最小值
            stk.push(0);
            minstk = val;
        }else{
            // 当前项与之前的最小值的关系
            long diff = val - minstk;
            if(diff < 0)
                minstk = val;
            stk.push(diff);
        }
    }
    
    void pop() {
        long tmp = stk.top();
        stk.pop();
        if(tmp < 0){
            // 是当前栈的最小值
            minstk = minstk - tmp;
        }
    }
    
    int top() {
        long tmp = stk.top();
        if(tmp < 0){
            return minstk;
        }else return tmp+minstk;
    }
    
    int getMin() {
        return minstk;
    }
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1151596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

支持「导入/导出」,应用迁移瞬间完成_三叠云

应用导入/导出 路径 应用管理 >> 创建新应用 功能简介 1. 应用程序支持「导出」功能&#xff0c;即将应用独立封装导出&#xff0c;用于三叠云系统内应用导入。 2. 应用程序支持「导入」功能&#xff0c;可以帮助用户将数据或文件导出到其他设备或应用程序中&#x…

思维导图在学习中的应用

思维导图在做学习中发挥着非常高效的作用&#xff0c;因为因为思维导图只有一页&#xff0c;所以需要准备和组织内容的时间会大大减少。并且思维导图的可视化的结构&#xff0c;可以让你瞬间将所有信息一览无余。而传统的笔记方法&#xff0c;会记录好几页。不仅信息冗杂&#…

【经典面试】87 字符串解码

字符串解码 题解1 递归(程序栈)——形式语言自动机(LL(1)) : O(S)另一种递归(直观) 题解2 2个栈(逆波兰式)1个栈(参考官方&#xff0c;但是不喜欢) 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的…

Linux 权限管理(二)

文件类型和访问权限&#xff08;事物属性&#xff09; linux前都会有一串这个字符&#xff0c;第二字符到第九字符分别表示拥有者&#xff0c;所属组&#xff0c;和other所对应的权限。那么第一个字符表示什么呢&#xff1f; 第一个字符表示文件类型&#xff1a; d&#xff1a…

开放式耳机百元价位推荐哪款比较好一点、最值得入手的开放式耳机

不知道有没有和我一样的朋友&#xff0c;在工作的时候喜欢带着耳机&#xff0c;享受音乐带来的愉悦。然而&#xff0c;传统的入耳式耳机在长时间佩戴时会给耳朵带来不适感&#xff0c;甚至损害听力。 因此我现在会使用开放式耳机&#xff0c;采用了开放式设计&#xff0c;不需…

流程封装与基于加密接口的测试用例设计

接口测试仅仅掌握 Requests 或者其他一些功能强大的库的用法&#xff0c;是远远不够的&#xff0c;还需要具备能根据公司的业务流程以及需求去定制化一个接口自动化测试框架的能力。所以&#xff0c;接下来&#xff0c;我们主要介绍下接口测试用例分析以及通用的流程封装是如何…

算法通关村第四关-青铜挑战基于链表完成栈

大家好我是苏麟 , 今天聊聊. 本期大纲 栈的基础知识栈的特征栈的操作Java中的栈 基于链表实现栈 栈的基础知识 栈的特征 栈和队列是比较特殊的线性表&#xff0c;又称之为访问受限的线性表。栈是很多表达式、符号等运算的基础&#xff0c;也是递归的底层实现。理论上递归能做…

进阶课5——人工智能数据分类

数据类型是指数据在计算机中的存储方式&#xff0c;根据数据的不同特征和表示方式&#xff0c;可以将数据分为不同的类型。在IT领域中&#xff0c;随着数字化信息技术的应用不断扩大&#xff0c;数据的种类和格式也越来越多。 从人机交互数据类型的视角来看&#xff0c;人工智…

RSA加密解密

生成公钥私钥&#xff1a; /*** RSA 生成公钥私钥*/ public class CreateSecrteKey {public static final String KEY_ALGORITHM "RSA";private static final String PUBLIC_KEY "RSAPublicKey";private static final String PRIVATE_KEY "RSAPri…

pytorch复现1_VGG

不涉及太多原理 VGG在2014年由牛津大学著名研究组VGG (Visual Geometry Group) 提出&#xff0c;斩获该年ImageNet竞赛中 Localization Task (定位任务) 第一名 和 Classification Task (分类任务) 第二名。 网络亮点&#xff1a; 1.通过堆叠多个3x3的卷积核来替代大尺度卷积核…

腾讯云轻量应用服务器“镜像”怎么选择合适?

腾讯云轻量应用服务器镜像怎么选择&#xff1f;如果是用来搭建网站可以选择宝塔Linux面板腾讯云专享版&#xff0c;镜像系统根据实际使用来选择&#xff0c;腾讯云百科txybk.com来详细说下腾讯云轻量应用服务器镜像的选择方法&#xff1a; 腾讯云轻量应用服务器镜像选择 轻量…

常熟,一座服装之城的三重升级

“姐妹你别看我瘦&#xff0c;我的肚子是这样&#xff0c;我115斤……你看我这个靴子&#xff0c;一穿就是会秒变大长腿的那种。” 晚上九点。大楼十层的走廊里&#xff0c;隐隐传来一个女性的声音。 如果你是她的157万粉丝之一&#xff0c;此时此刻打开抖音&#xff0c;就能…

8.3 矢量图层点要素单一符号使用四

文章目录 前言单一符号&#xff08;Single symbol&#xff09;渲染填充标记&#xff08;Filled marker&#xff09;QGis代码实现 总结 前言 上一篇教程介绍了矢量图层点要素单一符号中椭圆形标记&#xff08;Ellipse marker&#xff09;和字符标记&#xff08;Font marker&…

【全志R128外设模块配置】USB外设功能配置

USB 外设功能配置 USB 功能简介 USB 功能模块包括了USB Host&#xff0c;USB Device 和OTG 功能。 USB Host 目前已经支持上的功能有&#xff1a;Mass Storage&#xff0c;UVC。 USB Device 目前已经支持上的功能有&#xff1a;ADB&#xff0c;UAC。 OTG 主要用作Host 与D…

极速指南:在 SpringBoot 中快速集成腾讯云短信功能

前言 今天分享一个SpringBoot集成腾讯云短信的功能&#xff0c;平常除了工作&#xff0c;很多xdm做自己的小项目都可能用到短信&#xff0c;但自己去看文档挺费劲的&#xff0c;我这边就帮你节省时间&#xff0c;直接把步骤给你列出来&#xff0c;照做就行。 实战 1、申请密…

python_PyQt5日周月K线纵向对齐显示_2_显示工具

目录 写在前面&#xff1a; 结果显示&#xff1a; 代码&#xff1a; 计算日数据、周数据&#xff0c;月数据&#xff0c;并返回 生成提示信息数据&#xff0c;同时将日周月合并到一个DataFrame中 返回K线图和成交量柱状图的数据 主界面&#xff0c;显示日周月对齐的K线图…

【思考】为什么要有随机分析,为什么要有频域变换

问&#xff1a;为什么要有随机分析&#xff0c;为什么要有频域变换&#xff1f; 答&#xff1a;因为原有的时域方法很难描述一些信号或噪声。 例如这样一个信号 如果要写出时域公式&#xff0c;简直是太复杂了&#xff0c;怎么描述它呢。一是从0时刻开始指数衰减。二是可以说…

基于SpringBoot的科研工作量管理系统

目录 前言 一、技术栈 二、系统功能介绍 管理员功能介绍 科研项目列表 项目论文信息管理 项目类型管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 四、系统测试 概要 系统测试的特点  系统功能测试 登录功能测试 添加项目类型功能测试 测试结果分…

微信一次性群发1000条消息:高效沟通的秘诀

在当今数字化时代&#xff0c;微信作为一款广受欢迎的社交应用程序&#xff0c;为人们提供了便捷的沟通方式。在微信中&#xff0c;一次性群发1000条消息似乎是一个不可能完成的任务&#xff0c;因为微信自带的群发功能是只能一次性最多群发200人的&#xff0c;那么有没有什么工…