Leetcode题解——30. 包含min函数的栈(辅助栈思想)

news/2024/5/17 17:36:32/文章来源:https://blog.csdn.net/weixin_61857742/article/details/126647055

 题目地址:剑指 Offer 30. 包含min函数的栈 - 力扣(LeetCode)

目录

一.算法思想

二.代码实现

三.拓展思考


 

 

 首先说结论,这道题虽然难度不大,但是算法思想很重要,是辅助栈应用的生动实例。

所以,这里小编不再重点将代码,而是讲思想。

一.算法思想

本题使用了辅助栈的思想,小编私以为叫同步栈更加合适。

首先一个栈用来正常存放,记作st。

再设一个栈用来存放最小值,记作st_min。

这里的难点就是在st出栈后,假如出栈元素就是最小值,那么怎么回溯到上一个最小值。

本题的最核心的思想就是:

当st入栈出栈时,st_min同时入栈出栈。即同步栈。

但是st_min入栈的值始终是此时的最小值。

即,如果此时st入栈值小于st_min,那st_min入该值。

但如果st入栈值大,那st_min继续入自己的栈顶元素,即最小值。

以图举例:

此时st中入了三个元素,但后两个元素都比st_min的栈顶元素1大,所以st_min依旧入自己栈顶元素。 

但当-3入栈st后,-3小于1,所以st_min开始入栈-3。

出栈时就是正常出栈,当st中-2出栈,st_min也同步出栈-3。

这样就可以利用同步栈的特性,完美的解决了当出栈值就是最小值时,回溯到上一个最小值的问题。这也就是本题最核心的算法。 

二.代码实现

class MinStack {stack<int> st;stack<int> st_min;
public:MinStack() {st_min.push(INT_MAX);//首先装入一个最大值,确保第一个入栈元素能入st_min}void push(int x) {st.push(x);if(x < st_min.top())st_min.push(x);else st_min.push(st_min.top());}void pop() {st.pop();st_min.pop();}int top() {return st.top();}int min() {return st_min.top();}
};

三.拓展思考

小编感觉遇到栈和队列的问题,不妨多思考思考多个栈和多个队列组合、混合组合的方式。

这往往能用来解决问题。 

比如最经典的用栈实现队列 Loading Question... - 力扣(LeetCode)

用队列实现栈225. 用队列实现栈 - 力扣(LeetCode)

这些都是非常经典的算法思想启发题。 

在小编看来,解题最重要的不在难度,而是对于思想的启发。人是在创新中前进而不是在固步自封的强化中前进。

 

 拼命干活无法取代理解。—— H William


如有错误,敬请斧正

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】

&#xff08;1&#xff09;工业界推荐系统-小红书推荐场景及内部实践【业务指标、链路、ItemCF】 &#xff08;2&#xff09;工业界推荐系统-小红书推荐场景及内部实践【UserCF、离线特征处理】 &#xff08;3&#xff09;工业界推荐系统-小红书推荐场景及内部实践【矩阵补充、…

VSCode 配置 C++ 环境

开学了&#xff0c;后面更新速度会更慢&#xff0c;望周知。 接上回: https://blog.csdn.net/orangebench11/article/details/126111356 先说一下, 这个教程不是给完整json复制粘贴, 是要跟教程配置 (放心, 大部分配置都很简单)。 安装VSCode 官网: Visual Studio Code - C…

2021年研究生数模B题论文记录

2021年研究生数模B题论文记录1.常见数据处理方法&#xff1a;2.相关性系数选择3.聚类算法4.一种数据降维方式5.预测模型文章来源 2021年全国大学生研究生数学建模竞赛优秀论文集合&#xff0c;B题&#xff0c;文章编号&#xff1a;B21100130067 1.常见数据处理方法&#xff1a;…

Golang高性能日志库zap + lumberjack 日志切割组件详解

文章篇幅较长&#xff0c;可以先收藏防止迷路~ 目录zap日志库1. why zap?2. 简单使用3. 自定义logger例子4. Gin项目使用zap6. lumberjack 日志切割组件zap日志库 在许多Go语言项目中&#xff0c;我们需要一个好的日志记录器能够提供下面这些功能: 能够将事件记录到文件中&a…

Java刷题面试系列习题(六)

文章目录前言Java题目练习⭕题目一&#xff1a; 统计一句话中重复单词的个数&#x1f31f;代码演示&#x1f4af;思路解析⭕题目二&#xff1a; map简单应用&#x1f31f;代码演示&#x1f4af;思路解析⭕题目三&#xff1a; 集合排序&#x1f31f;代码演示&#x1f4af;思路解…

分享查题公众号制作过程

分享查题公众号制作过程 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xf…

不要再把数据可视化搞成表面工程,论数据可视化的正确逻辑

日前&#xff0c;我国网民规模达10.51亿的消息上了热搜&#xff0c;点进去看才发现是中国互联网络信息中心&#xff08;CNNIC&#xff09;发布了最新的《中国互联网络发展状况统计报告》&#xff0c;其中有很多值得思考的信息&#xff0c;也为未来发展指明了大的方向。就比如网…

Linux内核设计与实现 第一章 Linux内核简介

1.1Unix的历史 1969,贝尔实验室的程序员Dennis Ritchie 和Ken Thompsin等&#xff0c;编写Multics失败&#xff0c;不甘心没有交互式操作系统&#xff0c;设计了一个文件系统原型&#xff0c;这个原型最终演化成了Unix。 Unix系统设计简洁&#xff0c;发布时提供源代码&#x…

AviX Ergo 改善工作条件的视觉人体工程学

随着装配线的要求越来越复杂,人体工程学正成为关注的焦点。AviX Ergo 通过视频评估带来了一种全新的方法来改善工作场所的人体工程学。 AviX Ergo 将 AviX 方法对工作场所的深入分析与公认的 Borg CR-10 量表相结合,以确定工作场所的生理压力水平,同时评估心理压力。 1、BOR…

uniapp一键生成iOS通用链接

第一步&#xff1a;开启Associated Domains服务 登录苹果开发者中心 &#xff0c;在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID&#xff0c;确保开启Associated Domains服务 开启Associated Domains服务后需要重新生成profile文…

即时零售加速布局,社区团购的优势依旧非常明显

新零售业态不断发展&#xff0c;线上便捷性和个性化推荐优势逐步放大&#xff0c;线下渠道智能化水平持续提升&#xff0c;线上线下渠道趋向深度融合。即时零售、无接触消费和直播带货等新消费场景加快布局并保持发展势头。随着社会环境的变化以及购物需求的旺盛刺激&#xff0…

跨越技术鸿沟,革新存储产业:华瑞指数云重磅发布下一代软件定义存储产品

2022年8月31日&#xff0c;由华瑞指数云&#xff08;ExponTech&#xff09;主办的“全自研下一代软件定义存储产品体验沙龙”在北京圆满举办。发布会现场&#xff0c;华瑞指数云重磅推出全自研极速分布式块存储产品WDS 。这是继2021年11月24日该公司在中国数据与存储峰会发布Wi…

Django之路由层

目录 django请求生命周期流程图 路由匹配 分组命名匹配 无名分组 有名分组 传递额外的参数给视图函数 命名URL 和 URL反向解析 命名URL URL反向解析--前端 URL反向解析---后端 无名分组反向解析 有名分组反向解析 路由分发 名称空间 django请求生命周期流程图 dj…

Tomcat的安装与优化

目录 一、安装Tomcat所需javajdk环境 ①安装jdk ②设置jdk环境变量 ③加载生效&#xff0c;查看版本 二、安装Tomcat ①解压 ②改名&#xff0c;移动位置 ③优化管理 ④启动关闭 ⑤浏览器进入本地地址&#xff0c;添加8080端口即可进入tomcat服务器 三、优化tomcat启动…

什么是伪共享?Java8如何使用@sun.misc.Contended避免伪共享?

什么是伪共享 缓存系统中是以缓存行&#xff08;cache line&#xff09;为单位存储的。缓存行是2的整数幂个连续字节&#xff0c;一般为32-256个字节。最常见的缓存行大小是64个字节。当多线程修改互相独立的变量时&#xff0c;如果这些变量共享同一个缓存行&#xff0c;就会无…

网课搜题公众号接口 大学生新手使用必备

网课搜题公众号接口 大学生新手使用必备 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后…

风控模型黑箱可解释,试下这个方法来演示

模型的开发&#xff0c;目前在互金领域场景中因为变量多&#xff0c;开发周期短&#xff0c;目前用得最多的就是XGB、LGB这类的机器学习模型。 比如我们之前跟大家输出的关于个人信贷反欺诈评分卡的开发内容里&#xff0c;我们用的就是lightgbm来建模的&#xff0c;相关的操作细…

设计模式--简单工厂方法

简介 简单工厂模式属于创建型模式,是工厂模式的一种。简单工厂模式通过定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类,这个父类具有共有的属性和方法。因在简单工厂模式中用于创建实例的方法通常是静态方法,因此也称为静态工厂方…

SpringBoot整合Flowable工作流引擎框架

Flowable工作流引擎框架介绍 一个Java编写的轻量级业务流程引擎&#xff0c;为开发人员、系统管理员和业务用户提供工作流和业务流程管理&#xff08;BPM&#xff09;平台。不仅包括BPMN&#xff0c;还有DMN决策表和CMMN Case管理引擎&#xff0c;并且有自己的用户管理、微服务…

新机器(禁止上网)安装vscode及公钥方式登陆linux

1.1 新机器(禁止上网)安装vscode 注意:以下三个程序版本必须一至。 1) vscodeWin10安装程序 2) win10插件(ssh客户端) 3) linux里vscode-server-linux-x64.tar.gz(ssh服务端)方法一:从原桌面直接copy文件夹(绿色)转移到新机器 方法二:安装新的VSCodeUserSetup-x64-1.70.2.ex…