栈和队列——020包含min函数的栈

避坑指南:ZYNQ AXI_IIC读写EEPROM时常见的3个硬件陷阱 本文深入解析ZYNQ平台使用AXI_IIC控制器读写EEPROM时常见的3个硬件陷阱,包括上拉电阻选择、地址对齐问题和时钟配置同步。通过实测数据和解决方案,帮助开发者避免硬件设计中的常见错误,提升I2C通信的稳定性和可靠性。 阅读详情

1,问题描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

2,解题思路

em。。。。我觉得这道题的难点是题意理解上,只要把问题理解了,那解题思路还是较简单的。

这道题是让我们设计一个栈结构(此时的Solution类就是我们要设计的栈对象,最后牛客系统测试的时候也是将Solution当作一个栈对象来操作),这个栈除了包含常用的“弹出”、“查看”、“压入”操作,还要求包含一个能够让我们随时查看栈最小元素的min函数,并且时间复杂度为O(1)。

ok,题意理解了,那解题思路就简单了。首先题目要求时间复杂度是O(1),并且隐含条件是,我们调用min()函数时不能改变栈中元素的顺序,所以我们考虑使用辅助栈。

一共需要两个栈,其中一个是存放数据的(我们命名为数据栈,用stData表示),另一个是存放当前数据栈最小元素的(我们命名为最小栈,用stMin表示)。那么怎么才能随时获取到栈的最小元素呢?

答案如下:只需要在push操作的时候做些手脚就行。新来一个元素node,首先将该元素push进数据栈中,然后判断该元素是否小于等于最小栈的栈顶元素,如果满足小于等于,则最小栈push该元素,否则最小栈push最小栈的栈顶元素。这样操作下来,不管如何push,如何pop,数据栈和最小栈的元素总是相等的,而且最小栈的栈顶元素就是当前数据栈中最小的元素。

看源码更简单易懂,这里给出牛客网的一个测试用例:

3,源码

import java.util.Stack;

public class Solution {
    Stack<Integer> stData = new Stack<Integer>();
    Stack<Integer> stMin = new Stack<Integer>();

    public void push(int node) {
        stData.push(node);
        if(!stMin.isEmpty()) {
            if(node<=stMin.peek()) {
                stMin.push(node);
            }else {
                stMin.push(stMin.peek());
            }
        }else {
            stMin.push(node);
        }
    }

    public void pop() {
        stData.pop();
        stMin.pop();
    }

    public int top() {
        return stData.peek();
    }

    public int min() {
        return stMin.peek();
    }
}

 

ROS话题通信机制与rostopic工具实战指南 机器人操作系统(ROS)的分布式通信机制是其核心架构特色,其中话题(Topic)通信作为基础的发布-订阅模式,实现了节点间的松耦合数据交互。该机制通过标准化消息格式(message)和中间件层,支持传感器数据流、控制指令等场景的异步传输。rostopic命令行工具作为ROS开发者必备的调试利器,可实时监控话题状态、分析带宽负载,并进行消息注入测试。在工业机械臂、自动驾驶等实时系统中,合理使用ZeroCopy传输、消息序列化优化等技巧,能显著提升通信性能。本文结合激光雷达SLAM、机械臂控制等典型应用场景,详 阅读详情

相关推荐

C++怎么学?零基础也可以,一份完整学习路线图助你搞定!

提供一条清晰、系统且实践导向的C++学习路径。从基础语法、面向对象、泛型编程、异常处理,逐步深入STL、智能指针、并发编程等现代C++高级特性。无论是新手还是希望提升,通过系统学习与项目实践,助您将理论知识转化为实际解决问题的能力。

Lion_Long的博客 4025

队列和栈-020-包含min函数的栈

文章目录题目描述分析代码 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)) 分析 使用一个辅助栈,用来存储当前栈中的最小值,辅助栈中元素数量和原始栈一样多。每次入栈时,将入栈元素与辅助栈顶元素相比较,如果该元素较小,则将该元素也入辅助栈,否则将辅助栈顶元素再入辅助栈一次。出栈时,辅助栈也要出栈。即保持辅助栈顶元素为当前栈的最小元素值。 ...

记录求学阶段的技术学习、项目实践与成长思考。 260

【信息科学与工程学】计算机科学与自动化——第三十九篇 编程语言模型

定义值格 L={⊥,c1​,c2​,...,⊤},其中 ⊥表示未知/未初始化,ci​为具体常数,⊤表示非常量/多重可能值。格序关系:⊥⊑ci​⊑⊤。

weixin_49199313的博客 427

【剑指offer】数据结构类--栈和队列Stack&Queue

栈和队列Stack&Queue概念理解题目005-用两个栈实现队列020-包含min函数的栈021-栈的压入、弹出序列044-翻转单词顺序列(栈)064-滑动窗口的最大值(双端队列) 概念理解 Python数据结构之列表、栈、队列、链表、字典 题目 005-用两个栈实现队列 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 方法一: 栈A用来作入队列 栈...

2020找offer 178

【信息科学与工程学】【物理/化学和工程技术】第一百二十七篇 汽车中的动力学01

m=2000 kg,θ=20°(约36%坡度),v=5 m/s,μ_r=0.015,C_D=0.35,A=2.5 m²,T_max=350 N·m,i_total=12,η=0.85,r=0.35 m,μ=0.8,F_z_drive=12000 N(后驱)。:阻尼力F_MR = F_viscous + F_yield,F_viscous = c_vis v_piston,F_yield = (A_piston - A_rod) τ_y(L_channel/h_gap) sign(v_piston)。

weixin_49199313的博客 81

数据工程师——ETL

文章摘要 ETL(数据抽取、转换、加载)是数据处理的核心流程,负责将分散数据源整合为高质量数据。ETL与ELT的主要区别在于转换步骤顺序,分别适用于不同规模数据场景。数据仓库通过ETL从多个数据源集成数据,支持分析决策。维度建模中的事实表记录业务指标,维度表提供上下文信息。缓慢变化维度(SCD)处理随时间变化的维度数据,常见类型包括直接覆盖型、新增版本型等。数据清洗解决数据缺失、重复、错误等问题,确保数据质量。数据血缘记录数据流转路径,便于问题排查和影响分析。常用ETL工具如Kettle通过转换和作业实现数

weixin_45729710的博客 1559

queue的长度_剑指offer|解题代码-3-Stack-Queue-Heap-HashMap-Graph

最后更新时间:2019-10-07 本文首发于个人博客:剑指offer|解题代码-3-Stack-Queue-Heap-HashMap-Graph(Java) 这是专栏的第三篇关于剑指offer的解题代码,刷题进度: 46/67目录:Stack & Queue​ 005-用两个栈实现队列 √​ 020-包含min函数的栈 √​ 021-栈的压入、弹出序列 √​ 044-翻转单词顺序列(栈)...

weixin_39638526的博客 88

VSLAM框架对比

格VSLAM特点介绍: (一)ORB-SLAM2 (二)ORB-SLAM3 (三)LSD-SLAM (四)

ljtx200888的博客 2294

分布式进阶(十三)——分布式框架之高性能:Redis主从同步

Redis实现高可用的最基本方式就是构建主从架构,主从节点之前会进行数据同步,以保证数据的一致性。主从之间的数据同步方式有全量复制和增量复制。

smart_an的专栏 1137

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

Time_1023的博客 1872

Macbook Pro上如何修改brew源

一、需求说明 我的macbook电脑安装了中科大的brew源码,发现安装gpg工具失败,其他工具可以正常安装,为了能将gpg安装成功,就找了找切换brew源的方案,记录如下。 二、切换至国内源 由于使用github默认源有可能存在路径远或者部分服务访问超时的原因,切换至国内源可以提速。 2.1 替换brew.git $ cd "$(brew --repo)" # 中国科大: $ git remote set-url origin https://mirrors.ustc.edu.cn/brew.git #

bufegar0的博客 1079

为什么这么多面经推荐 Daily Coding Problem Solutions?用365道大厂真题备战面试的策略清单

**Daily Coding Problem Solutions** 是一个用 Python 编写的编程面试题库,收录了 365 道来自 Google、Facebook、Apple、Uber 等大厂的真实面试题及参考答案,是备战大厂面试、系统刷题的高性价比资源 🎓。这篇文章带你快速了解仓库结构、三步跑通题解,并给出一份按题型分类的刷题策略清单,帮你用最少时间覆盖最高频考点。 ## 一、仓库里有

gitblog_00875的博客 856

国科GK7202V300芯片开发避坑指南:从uboot编译到SDK配置的12个实战问题解决

本文针对国科GK7202V300芯片开发过程中的常见难题,提供从uboot编译、SDK配置到系统部署的实战解决方案。详细解析了开发环境搭建、内核编译、驱动模块加载、根文件系统构建及烧写部署等12个关键环节的避坑指南,帮助开发者高效解决编译错误、配置冲突等典型问题,提升开发效率。

sunny的博客 234

pandas多维聚合与滚动计算的生产级实战指南

多维聚合是数据分析中将数据按多个维度分组并计算统计量的核心技术,其本质是基于分组键的哈希映射与向量化聚合;滚动计算则依赖时间或序号窗口实现动态指标演化,需精确控制min_periods、closed等参数以保障业务语义正确性;二者结合支撑金融风控、客户运营等高价值场景中的实时特征工程与周期性报表生成;本文聚焦pandas在真实交易数据场景下的高性能写法、MultiIndex治理、自定义函数健壮性设计及滚动/扩展窗口的线上避坑实践。

weixin_30500105的博客 409

配置 NVIDIA RTX 5090 + sm_120 + flashattention,已跑通一个大模型 ~~

本文介绍了在Ubuntu 22.04系统下为NVIDIA RTX 50系显卡搭建深度学习环境的完整流程。重点包括:1)安装适配50系显卡(sm_120架构)的CUDA 12.9驱动和Toolkit,需注意禁用系统自带驱动;2)配置环境变量解决nvcc命令识别问题;3)通过源码编译方式安装支持sm_120的PyTorch nightly版本(cu129),解决官方二进制包不兼容问题。整个过程涉及显卡驱动安装、CUDA环境配置、PyTorch适配等关键步骤,并提供了详细的验证方法和常见问题解决方案。文中特别强调

qq_36674060的博客 6158

游戏开发实战:5种AOI算法对比(九宫格 vs 灯塔 vs 十字链表)

本文深入对比了游戏开发中五种主流AOI算法(九宫格、灯塔、十字链表等)的性能与适用场景,帮助开发者根据项目规模选择最优解决方案。通过详细的技术分析和实战数据,揭示不同算法在万人同屏等极端场景下的表现差异,为MMORPG等大型多人在线游戏提供关键性能优化指南。

weixin_29268385的博客 474

2025年下半年网络工程师案例分析真题及答案解析

2025年下半年网络工程师案例分析真题及答案解析

鹿鸣天涯 1089

第二人生的源码分析(四十七)发送下载纹理图片请求

这里接着上一次获取纹理图片线程,继续分析发送纹理图片请求到服务器。代码如下:#001 void LLTextureFetch::sendRequestListToSimulators()#002 {#003      const S32 IMAGES_PER_REQUEST = 50;#004      const F32 LAZY_FLUSH_TIMEOUT = 15.f; //

大坡3D软件开发 3246

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

k6 性能测试实战:如何把压测结果从黑盒变成看得懂的决策依据

发布新版本之前,你多半都有过这样的忐忑:接口扛不扛得住?是拍脑袋等用户反馈,还是拿一份能看、能信、能用来拍板的数据说话?k6 就是为这个场景而生的现代负载测试工具,它用 Go 写核心保证性能,用 JavaScript 写脚本降低门槛,内置从指标采集、实时展示到 Grafana/InfluxDB 等可视化集成的完整链路,让你把压测结果变成可行动的决策依据,而不是一堆看不懂的数字。 这篇文章不打算从

gitblog_00369的博客 800

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

蔡军生先生第二人生的源码分析(四十七)发送下载纹理图片请求

这里接着上一次获取纹理图片线程,继续分析发送纹理图片请求到服务器。代码如下:#001 void LLTextureFetch::sendRequestListToSimulators()#002 {#003      const S32 IMAGES_PER_REQUEST = 50;#004      const F32 LAZY_FLUSH_TIMEOUT = 15.f; //

杨德龙的专栏 1200

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

如何优化Klipper固件性能:高级运动控制与振动抑制实战指南

Klipper作为一款先进的3D打印机固件,通过将运动计算从微控制器转移到高性能主机(如树莓派),实现了前所未有的打印精度和速度。本文将深入探讨Klipper的核心性能优化技术,特别是运动控制算法和振动抑制功能,帮助中级用户和开发者充分发挥硬件潜力,获得更高质量的打印效果。 ## 核心关键词与适用场景 **核心关键词**:Klipper性能优化、运动控制、振动抑制、输入整形、压力推进 **长

gitblog_01052的博客 997

Linux SPI驱动可靠性设计:从probe到数据闭环的全链路实践

SPI驱动不仅是硬件通信接口,更是时序敏感、状态可控的嵌入式系统关键组件。其核心原理在于将用户请求转化为符合物理层约束的SPI事务,涉及字符设备调度、spi_message拆解、transfer参数映射、CS信号精确控制、DMA/PIO模式选择及中断同步机制。技术价值体现在工业场景下的高可靠性——避免超时、错帧与内存不一致,支撑温湿度传感器、ADC等精密外设稳定运行。典型应用场景包括i.MX6ULL平台上的ADS124S08驱动开发,需严格遵循datasheet时序(如delay_usecs、cs_chan

weixin_34197488的博客 789

从零搭建个人SDR接收器监测站:OpenWebRX完整部署与远程监听实战

想监听航空频段、跟踪附近航班、解码气象传真,却发现自己花几百块买的SDR接收器插上电脑后只有一片沙沙的噪声?这不是设备问题,而是你缺少一套靠谱的开源无线电软件来"接管"它。OpenWebRX 正是这样一套开源、多用户、带 Web 界面的 SDR 接收器软件:把硬件交给它,你只需要打开浏览器,就能实时调谐频谱、解调几十种信号,还能把电台分享给朋友。本文就带你从零部署一座属于自己的无线电监测站。 #

gitblog_00313的博客 426

SkillHub 撤销 API Token 校验实现指南:fail-closed Bearer 语义、凭证生命周期矩阵与 401/403 契约落地

本文以 SkillHub 开源仓库中 [2026-07-28-revoked-token-validation.md](https://link.gitcode.com/i/b69b183c9a503042da7df687399df961) 实现计划为核心骨架,系统讲解如何锁定 CLI API 的「Bearer 失效即拒绝(fail-closed)」行为:无效 Bearer 凭证不得回退到 Web

gitblog_00534的博客 864
上一篇: 其他算法——顺时针打印矩阵
下一篇: 栈和队列——021栈的压入、弹出序列(判断栈的出入合法性)
Manduner_TJU
博客等级 码龄9年 157粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值