面试题21:包含min函数的栈

AutoDock Vina实战:从零开始完成分子对接(附7VU6案例详解) 本文提供了一份详细的AutoDock Vina分子对接实战指南,以SARS-CoV-2 3CL蛋白酶(PDB ID: 7VU6)为例,从零开始手把手教学。内容涵盖软件安装、环境配置、受体与配体文件准备、对接参数设置,以及结果分析与可视化解读,旨在帮助计算生物学与药物发现领域的新手快速掌握这一核心技能。 阅读详情

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop函数的时间复杂度都是O(1)。


分析

栈应该是我们很熟悉的一种数据结构了,它是一种“后进先出”的数据结构,并且只能在栈的一端(栈顶)进行操作。所以其push和pop操作的时间复杂度都是O(1)。如果题目没有要求min函数的时间复杂度的话,我们可以在min函数里面遍历所有的元素并将其保存起来,找到最小的元素后再将所有元素以相反的顺序放回去。但现在这种方案显然不行。

我们可以定义两个栈,一个存放我们需要的元素,称为元素栈。另一个存放当前元素栈里面最小的一个元素值,称为最小值栈。这样,当调用min函数时,直接返回最小值栈的栈顶就可以了,达到了O(1)的时间复杂度。这是一个“以空间换时间”的方法。

这样,在插入元素时,先将其插入元素栈里,并判断该元素是否小于最小值栈的栈顶元素,若小于,则将该元素插入最小值栈,否则,将最小值栈的栈顶元素在此插入最小值栈。pop时,两个都pop即可。

代码如下:

class StackIsEmpty{};

template<typename T>
class MyStack{
public:
    void push(const T& t)
    {
        if(s.empty())
        {
            m.push(t);
        }
        else
        {
            if(t<m.top())
            {
                m.push(t);
            }
            else
            {
                m.push(m.top());
            }
        }
        s.push(t);
    }
    void pop()
    {
        if(!s.empty())
        {
            s.pop();
            m.pop();
        }
        else
            throw StackIsEmpty();
    }
    T& min()
    {
        if(!s.empty())
        {
            return m.top();
        }
        else
            throw StackIsEmpty();
    }
    bool empty()
    {
        return s.empty();
    }
private:
    stack<T> s;
    stack<T> m;//min
};

以上

如果你有任何想法或是可以改进的地方,欢迎和我交流!

完整代码及测试用例在github上:点我前往





Windows 11下Telnet端口23连接失败的终极解决方案(附详细排查步骤) 本文详细解析了Windows 11系统中Telnet端口23连接失败的常见原因及解决方案。从Telnet客户端功能启用、服务端配置检查到网络连接诊断,提供了一套完整的排查步骤,帮助用户快速定位并解决连接问题,同时给出了安全使用Telnet的建议。 阅读详情

相关推荐

腾讯滑块验证码collect参数逆向与JSVMP对抗实战

本文深入解析腾讯滑块验证码collect参数的逆向过程与JSVMP虚拟机对抗技术。通过详细的环境搭建、抓包分析和JSVMP逆向技巧,揭示collect参数的生成逻辑与加密流程,并提供完整的模拟实现方案和常见问题排查方法,助力开发者突破腾讯天御验证码的防护机制。

weixin_29009501的博客 1573

包含min函数的栈(Java)

题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。 思路: 要使时间复杂度是O(1),需要每次压入一个新元素进栈时,将栈里的所有元素排序,让最小的元素位于栈顶。但是这种想法不能保证最后压入栈的元素能够最先出栈,因为这个数据结构已经不是栈了。 于是借助于一个辅助的成员变量来存放最小的元素。每次压入一...

Sweet Baby,甜宝 2867

进芯AVP28335烧录避坑全记录:CCS、Uniflash、C2Prog、SDFlash四大工具配置详解

本文详细解析了进芯AVP28335芯片在烧录过程中遇到的常见问题及解决方案,涵盖CCS、Uniflash、C2Prog和SDFlash四大工具的配置要点。针对国产器件AVP28335的特殊需求,提供了从开发环境准备到烧录验证的全流程指南,帮助开发者高效完成程序烧录,避免常见陷阱。

weixin_30836759的博客 588

牛客网 包含min函数的栈

题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。思路:1、创建两个栈,一个存放所有的数据,一个存放每次比较的最小的数据;2、来第一个数据,直接进栈data_stack和min_stack;3、之后每次来一个数据,都将之前min_stack的栈顶元素和新的数据进行比较,将最小的元素进栈min_stack;4、每次都把最小元素压入min_stack,那么就能保证min_...

LuckyMeizai的博客 389

RV1126 ISP开发实战:从Tuner调试到IQ文件解析

本文详细介绍了RV1126 ISP开发的完整流程,从Tuner调试到IQ文件解析,涵盖了环境搭建、工具使用、参数配置及性能优化等关键环节。通过实战案例和避坑指南,帮助开发者快速掌握Rockchip芯片的ISP开发技巧,提升图像处理质量。

weixin_29195615的博客 570

单细胞分析进阶:sctransform标准化在Seurat中的实战解析

本文深入解析了sctransform标准化方法在Seurat单细胞分析中的实战应用。通过对比传统对数标准化,sctransform能更有效地建模并剔除技术噪音,提升数据质量。文章提供了从环境配置、数据准备、核心参数解析到完整流程整合的详细指南,并针对常见问题给出解决方案,帮助研究者获得更清晰的细胞分群和更可靠的差异表达结果。

weixin_29248313的博客 150

牛客网刷题|包含min函数的栈

题目来源:牛客网 编程连接 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 解析: 要在O(1)的时间复杂度内得到最小值。那么只能空间换时间了; 设置一个数据栈,一个辅助栈,辅助栈中存储的是每一步的最小值,当前状态的最小值就是辅助栈的栈顶元素,即 把元素压入数据栈时,比较辅助栈栈顶元素和压入的元素的大小,如果压入的元素比...

legalhighhigh的博客 263

Ambari 3.0.0 + BigTop 3.3.0 源码编译与集群部署指南(Kylin V10 / aarch64)

仅仅是针对“应用商店目录(Applications Catalog)”的一个外围附属子模块(它不是 YARN 监控大盘,不影响 YARN UI 网页的主体使用),我们可以采用。自带的 Node 二进制是 x86_64 版本,在 ARM64(aarch64)容器上无法执行(Exit value: 126)。:Ambari Server/Agent 使用 JDK 17,BigTop 大数据组件(Hadoop/HBase/Spark 等)使用 JDK 8。,源码中包含 x86 特定的原生二进制文件。

amumu1992的博客 481

包含min函数的栈 牛客网 剑指Offer

包含min函数的栈 牛客网 剑指Offer 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 class Solution: def __init__(self): self.stack = [] self.minStack = [] def push(self,...

DarrenXf的专栏 285

从零构建高精度温控系统:ADN8835的单电感拓扑与0.01℃稳定性实战解析

本文深入解析了如何利用ADN8835构建高精度温控系统,重点介绍了其创新的单电感拓扑架构如何实现0.01℃的长期稳定性。内容涵盖精密PCB布局、电源滤波设计,并详细阐述了针对不同热容负载的数字PID控制参数整定策略,为开发精密仪器和医疗设备提供了实战指南。

r2s3t4的博客 238

Python实现高光谱图像生成与增强:从RGB到多光谱转换(附完整代码)

本文分享一个基于Python的实用工具,能够将普通RGB图像转换为模拟高光谱图像,并进一步生成增强的彩色可见图像。为了直观展示图像细节,程序通过对特定波段的组合,生成了一幅增强的 RGB 彩色图像。该函数的主要目标是将一张普通的 RGB 图像转换为包含多个波段的高光谱图像。通过该函数,我们能直观地看到高光谱图像经过波段组合后所得到的彩色图像效果。通过以上代码,我们可以实现对海量图像数据的自动化处理,极大地提升工作效率。已附在文中,欢迎下载测试!通过以上步骤,我们可以生成一幅包含多个光谱波段信息的图像。

m0_74824642的博客 3665

牛客网14:包含min函数的栈

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 # -*- coding:utf-8 -*- class Solution: def __init__(self): self.stack=[] self.min_stack = [] #将栈分为两部分,一部分是一个最小值,另一部分是所有值 def ...

smart boy 278

4-20mA电流信号转电压

该电路实现4-20mA电流信号转电压(0.44-2.2V)调理功能,采用两级运放设计:第一级LMH6642MFX进行11倍放大,第二级配置为缓冲器加二阶低通滤波。电路包含10Ω采样电阻、多级RC滤波和ESD防护,具有抗干扰强、功耗低(4mW)等特点,适配3.3V系统ADC采集。通过使能控制MOS管可实现节能模式,适用于工业自动化、环境监测等场景。设计合理平衡了信号精度与功耗,输出电压范围留有充足余量避免饱和。

qq_37999850的博客 301

面试题21:包含min函数的栈

问题:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1)。 思路:使用一个辅助栈,辅助栈的栈顶始终是数据栈中最小的元素。比如数据栈3进栈,现在3是最小值,我们也把这个最小值压入辅助栈。 数据栈4进栈,此时数据栈中依然3是最小值,则将3继续压入辅助栈。数据栈2进栈,此时2是最小值,将2压入辅助栈。 此事数据栈中

u012724503的专栏 256

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

剑指Offer之面试题21:包含min函数的栈

所有代码均通过G++编译器测试,仅为练手纪录。 //面试题21:包含min函数的栈 //题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。 //     在该栈中,调用min/push/pop的时间复杂度都是O(1)。 //面试题21:包含min函数的栈 //题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。 //

Pillary的专栏 977

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

《剑指Offer》面试题21:包含min函数的栈

《剑指Offer》 P132面试题21:包含min函数的栈题目:

(●—●) 716

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

面试题21:栈:包含min函数的栈

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 方法一:只有一个栈空间,节省空间,但是min方法的时间复杂度是O(n)import java.util.Stack;public class Solution { private Stack<Integer> stack = new Stack<>(); public void push(int node

Mook的博客 318

[剑指offer]面试题21:包含min函数的栈

面试题21:包含min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。 栈内压入3、4、2、1之后接连两次弹出栈顶数字再压入0时,数据栈、辅助栈和最小值的状态 代码如下: #include <iostream> #include <stack> #include <assert.h> using namespace std; template<typenam

m0_51955470的博客 192

面试题 21: 包含min函数的栈

一. 题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min 函数.在该栈中,调用min,push 及pop的时间复杂度都是O(1).代码请到我的代码库中下载 Point2Offer二. 代码package week_5;import java.util.Stack;/**难度系数:*** * 剑指offer: 包含min函数的栈 * 方法: 建一个辅助栈,存最小值 * 测试用

高筑墙,广积粮,缓称王 701

剑指Offer:面试题21 包含min函数的栈

/* 包含min函数的栈: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的 时间复杂度都是O(1) 分析: 如果直接遍历来找,需要O(n) 如果要实现是O(1),基本只能靠hash了,栈的最小元素绝对应该放到栈顶或在栈顶寻找到,否则不可能是O(1) 如何将最小元素放到栈顶?每次放的时候,将大的放在下面,小的放在

qingyuanluofeng的专栏 740
上一篇: 面试题20:顺时针打印矩阵
下一篇: 面试题22:栈的压入、弹出序列
SmartBrave
博客等级 码龄12年 25粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值