• 面试经典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 是栈中的元素个数。

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

  • 相关阅读:
    【C语言进阶】指针进阶(三)
    Minimum Varied Number Codeforces 1714C
    损失函数L1Loss/L2Loss/SmoothL1Loss
    Yolov5 ONNX导出报错: export failure: Unsupported ONNX opset version: 17
    【Logback+Spring-Aop】实现全面生态化的全链路日志追踪系统服务插件「SpringAOP 整合篇」
    mysql的if语句,如何在if不成立的时候不执行操作
    Linux环境变量之shell中export定义全局变量和echo 变量的区别
    postgresql源码学习(37)—— 备份还原① - do_pg_start_backup函数
    【李宏毅】深度学习-CNN(影像辨识为例)
    未来展望:Starday供应链火力全开,为跨境电商再添动力!
  • 原文地址:https://blog.csdn.net/m0_60388871/article/details/136449747