面试经典150题——最小栈

​Life is a journey, there's no right or wrong.

a close up of a group of different colored powdered objects

1. 题目描述

image-20240304090421650

2.  题目分析与解析

2.1 思路一

看到题目的一瞬间,有没有注意到 常数时间内检索到最小元素的栈,那说明我们肯定需要把最小元素的下标存储起来,这样才能在常数时间内找到。

其次因为它是一个栈,我们就需要定义一个数组,用来存储栈内元素。根据栈的 先进后出的性质,需要指定两个指针,用来指向栈的头和尾。

代码思路:

  1. 定义一个数组,定义两个指针表示栈头尾,定义一个指针表示最小元素的

  2. 初始化栈,初始大小及增长自定

  3. push操作将元素加入数组,并将尾指针后移1,同时比较当前元素和最小元素大小,取出最小的那个元素的下标更新表示最小元素的的指针

  4. pop操作将元素加入数组,并将尾指针前移1,同时比较pop的元素和最小元素大小,如果pop出的元素就是最小元素,那么遍历数组找到新的最小值存储在指针

  5. top操作取出尾指针指向的元素

  6. getMin直接返回最小元素下标的位置的值

  7. 注意因为数组长度不能固定,需要在push和pop时动态变化大小

因为题目提示了:

image-20240304091424126

,所以就直接定义数组为int类型。

(不瞒大家,因为两行代码的顺序问题搞了一上午用python生成了测试用例才找到原因,就在这里记录一下:

image-20240304132325747

顺序问题啊,先拷贝再赋值,我之前先赋值再拷贝)

3. 代码实现

3.1 思路一

image-20240304132431232

image-20240304132454172

4. 相关复杂度分析

时间复杂度分析:
  1. push(int val):

    • 扩容操作的时间复杂度为 O(N),其中 N 是当前栈中的元素个数。因为在扩容时需要将原数组中的元素拷贝到新数组中。

    • 更新栈顶指针、更新最小值的操作为 O(1)。

  2. pop():

    • 缩容操作的时间复杂度为 O(N),其中 N 是当前栈中的元素个数。因为在缩容时需要将原数组中的元素拷贝到新数组中。

    • 查找新的最小值的操作为 O(N),其中 N 是当前栈中的元素个数。因为需要遍历栈中的元素以找到最小值。

    • 更新栈顶指针的操作为 O(1)。

  3. top() 和 getMin():

    • 这两个方法的时间复杂度都为 O(1),因为它们只是简单地返回栈顶元素和当前最小值,没有涉及遍历或其他复杂操作。

因此,总体来说,push、pop 操作的时间复杂度取决于栈中元素的数量,并且可能会触发数组扩容和缩容,而这些操作的时间复杂度与元素数量成线性关系。

空间复杂度分析:

  1. elements数组的空间复杂度:

    • 最初创建时,数组的长度是 10,因此空间复杂度为 O(1)。

    • 随着元素的增加、删除以及数组的扩容和缩容,数组的空间会动态变化,但总体上考虑,空间复杂度为 O(N),其中 N 是栈中的元素个数。

综上所述,时间复杂度取决于元素的数量,而空间复杂度随着元素数量的增加而线性增加。

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

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

相关文章

网工学习 DHCP配置-接口模式

网工学习 DHCP配置-接口模式 学习DHCP总是看到,接口模式、全局模式、中继模式。理解起来也不困难,但是自己动手操作起来全是问号。跟着老师视频配置啥问题没有,自己组建网络环境配置就是不通,悲催。今天总结一下我学习接口模式的…

揭秘8.4k星开发者的秘密武器:it-tools在线工具集,你不可不知!

在IT的世界里,为了更好地发挥自己的才能,必须善用优秀的工具。深入挖掘IT-Tools的神奇力量,让你的工作像魔法一般变得轻松高效!无论是自动化、监控还是问题解决,这些工具是我们事业成功的关键利器。选择合适的IT工具&a…

PlantUML - 时序图

时序图主要内容 下面是一个简单的时序图,我们可以很容易并且美观的表达我们的交互流程,只需要在箭头的两边指定一个名字,加上描述即可: startuml bkloanapply -> bkloanapprove : request bkloanapprove --> bkloanapply :…

C++ map用法

int main() {void *p;str *st;st (str*)malloc(sizeof(str));st->a 23;st->b 24;p st;//使用void指针需强制类型转换printf("%d\n%d\n",((str*)p)->a, ((str*)p)->b);free(st);map<char, int> mpci;mpci[m] 20;mpci.insert(pair<char, int…

#WEB前端(盒子模型)

1.实验&#xff1a;盒子 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; margin&#xff08;外边距&#xff09; border&#xff08;边框&#xff09; padding&#xff08;内边距&#xff09; 4.代码&#xff1a; <!DOCTYPE html> <html lang"en"> &…

【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 再谈构造函数 初始化列表 隐式类型转换 explicit关键字 static成员 概念 计算程序中创建出了多少个类…

力扣61:旋转链表

题目 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2输出&#xff1a;[4,5,1,2,3] 示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k 4输出&#xff1a;…

卷积神经网络(CNN)原理与实现

卷积神经网络(CNN) 卷积神经网络原理卷积神经网络的数学推导卷积层反向传播算法数学推导卷积层实现代码 卷积神经网络(CNN) 卷积神经网络原理 卷积神经网络是一种用于图像、语音、自然语言等数据的深度学习模型&#xff0c;其核心思想是使用卷积操作提取输入数据的特征&…

4、通达OA代码审计

一、文件操作 1、文件上传配合文件包含审计 文件上传首先确定存在漏洞的文件。和文件上传相关的函数比如upload。在从上到下分析构造的条件1. 从 POST 请求中提取变量 P 的值。 2. 检查 P 是否已设置且不为空字符串。 3. 如果 P 已设置且非空&#xff0c;进入包含 "inc/…

[NSSCTF 2nd]MyJs

做一题ejs原型链污染 首先是登录界面 源码里面提示了源码的路由 js不熟先审计一下 const express require(express); #导入Express框架&#xff0c;用于构建Web应用程序的服务器和路由 const bodyParser require(body-parser); #导入body-parser中间件&#xff0c;用于解析…

软考证书=职称证书?

官方的回答 根据《计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试暂行规定》&#xff08;国人部发〔2003〕39号&#xff09;规定&#xff0c;通过考试并获得相应级别计算机专业技术资格&#xff08;水平&#xff09;证书的人员&#xff0c;表明其已具备从事相…

使用Javassist 在android运行时生成类

序言 最近在写框架&#xff0c;有一个需求就是动态的生成一个类&#xff0c;然后查阅了相关文献&#xff0c;发现在android中动态生成一个类还挺麻烦。因次把一些内容分享出来&#xff0c;帮助大家少走弯路。 方案一 DexMaker DexMaker 是一个针对 Android 平台的库&#xf…

Myqsort:基于冒泡排序算法的C语言实现

我们将详细介绍一个基于冒泡排序算法的自定义排序函数——Mysqrt。该函数通过使用用户提供的比较函数进行元素间的比较&#xff0c;并结合swap交换函数对任意类型的数据进行排序。下面是对代码的逐行解析。 逻辑导图 代码实现 // 头文件 #include<stdio.h>// 定义比较函…

华为自动驾驶技术详解报告分享

ADS2.0首发搭载问界M5智驾版&#xff0c;城市NCA计划年底全国开通。2023年4月16日华为在智能汽车解决方案发布会上发布了最新的ADS2.0产品&#xff0c;硬件数量减少至27个(11个摄像头12个超声波雷达3个毫米波雷达1个激光雷达,ADS1.0有34个)&#xff0c;车载计算平台改为MDC610&…

python自学2

第一阶段第三章 if&#xff0c;elif&#xff0c;else语句 这个是有顺序的&#xff0c;如果第一个满足下面的就不会执行&#xff0c;else也可以不写&#xff0c;执行的效果等同于三个独立的if。 还可以写的更加简洁一些 直接输入的参数带入到判断里面去 小练习&#xff1a; 做…

打造专属投屏体验:Windows系统投屏到iOS系统

想要将电脑投屏共享给同事或朋友&#xff0c;又担心隐私内容泄露&#xff1f;来来来&#xff0c;这里有妙招&#xff01; AirDroid Cast网页版让电脑投屏变得挑剔&#xff0c;只展示你允许共享的内容。会议资料、个人照片、敏感文件&#xff0c;都将得到严格的筛选&#xff0c;…

云原生之容器编排实践-ruoyi-cloud项目部署到K8S:Nacosv2.2.3

背景 前面搭建好了 Kubernetes 集群与私有镜像仓库&#xff0c;终于要进入服务编排的实践环节了。本系列拿 ruoyi-cloud 项目进行练手&#xff0c;按照 MySQL &#xff0c; Nacos &#xff0c; Redis &#xff0c; Nginx &#xff0c; Gateway &#xff0c; Auth &#xff0c;…

windows环境下Grafana+loki+promtail入门级部署日志系统,收集Springboot(Slf4j+logback)项目日志

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

动态规划DP之背包问题4---分组背包问题

目录 DP分析&#xff1a; 例题&#xff1a; 01背包&#xff1a; 一种物品只有一件 动态规划DP之背包问题1---01背包问题-CSDN博客 完全背包&#xff1a;一种物品有无限件 动态规划DP之背包问题2---完全背包问题-CSDN博客 多重背包&#xff1a;一种物品有有限…

【三维重建】【SLAM】SplaTAM:基于3D高斯的密集RGB-D SLAM(CVPR 2024)

题目&#xff1a;SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM 地址&#xff1a;spla-tam.github.io 机构&#xff1a;CMU&#xff08;卡内基梅隆大学&#xff09;、MIT&#xff08;美国麻省理工&#xff09; 总结&#xff1a;SplaTAM&#xff0c;一个新…