返回顶部
首页 > 资讯 > 前端开发 > JavaScript >找出栈中最小值的方法是什么
  • 541
分享到

找出栈中最小值的方法是什么

2024-04-02 19:04:59 541人浏览 八月长安
摘要

本篇内容介绍了“找出栈中最小值的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!题目定义栈的数据结

本篇内容介绍了“找出栈中最小值的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

题目

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

示例:

  • MinStack minStack = new MinStack();

  • minStack.push(-2);

  • minStack.push(0);

  • minStack.push(-3);

  • minStack.min(); --> 返回 -3.

  • minStack.pop();

  • minStack.top(); --> 返回 0.

  • minStack.min(); --> 返回 -2.

  • LeetCode  地址:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/

思考

首先来说这道题目本身很好理解,它的实现难点在于以下两个方面:

  • 当我们进行 pop(移除栈顶元素)操作时如果删除的是当前最小值,那么我们如何寻找下一个最小值?

  • 要保证调用 min、push 及 pop 的时间复杂度都是 O(1)。

也就是说,在我们执行了 pop 时如果移除的栈中最小的值,那么如何寻找栈中的下一个最小元素?并且要保证操作的时间复杂度为  O(1)。这个时间复杂度制约了我们在移除了最小值之后不能通过遍历查找下一个最小值,所以这就成为了这道题的难点。

比如当我们移除以下栈顶元素值:

找出栈中最小值的方法是什么

因为最小值就是 1,因此在移除之后最小值也被移除了,如下图所示:

找出栈中最小值的方法是什么

那么接下来,让我们一起思考 3 分钟,想一想应该如何处理这个问题~

解题思路

其实我们可以在每次入栈时,判断当前元素是否小于最小值,如果小于则将原最小值和最新的最小值相继入栈,这样在调用 pop  时即使移除的是最小值,我们也能通过获取下一个元素得到一个新的最小值,执行流程如下所示。

操作步骤1

入栈第一个元素,因为是第一个元素,因此最小值就是此元素的值。

找出栈中最小值的方法是什么

操作步骤2

入栈第二个元素,如下图所示:

找出栈中最小值的方法是什么

因为入栈的元素 3 比 8 小,所以先将栈中的原最小值 8 存入栈中,再将 3 入栈。

操作步骤3

入栈第三个元素,如下图所示:

找出栈中最小值的方法是什么

因为入栈元素 5 大于 3,因此栈中的最小值不变,直接将元素 5 入栈。

操作步骤4

继续入栈,如下图所示:

找出栈中最小值的方法是什么

入栈元素 1 大于 3,因此先将原最小值 3 入栈,再将 1 入栈,栈中的最小值更改为 1。

操作步骤5

执行出栈操作,如下图所示:

找出栈中最小值的方法是什么

元素 1 出栈,判断当前元素就是栈的最小值,因此将栈顶元素 3 设置为最小值,并移除元素  3,如下图所示:

找出栈中最小值的方法是什么

操作步骤6

继续出栈,如下图所示:

找出栈中最小值的方法是什么

因为元素 5 不是当前最小值,因此直接出栈。

操作步骤7

继续出栈,如下图所示:

找出栈中最小值的方法是什么

因为出栈元素 3 为最小值,因此继续将最小值设置为栈顶元素 8,并将栈顶元素出栈,如下图所示:

找出栈中最小值的方法是什么


这样就剩下最后一个元素了,最后一个元素出栈之后就成空栈了,整个流程就执行完了。

实现代码1

接下来我们将上面的思路用代码实现一下,我们用数组实现的栈来实现相关的功能,代码如下:

class MinStack {     private int[] data; // 栈数据     private int maxSize; // 最大长度     private int top; // 栈顶指针(下标)     private int min; // 最小值      // 构造函数     public MinStack() {         // 设置默认值         maxSize = 10000;         data = new int[maxSize];         top = -1;         min = Integer.MAX_VALUE;     }      // 入栈(添加元素)     public void push(int x) {         if (min >= x) {             // 遇到了更小的值,记录原最小值(入栈)             data[++top] = min;             min = x;         }         // 当前值入栈         data[++top] = x;     }      // 出栈(移除栈顶元素)     public void pop() {         if (min == data[top]) {             min = data[--top]; // 拿到原最小值,并(将原最小值)出栈         }         --top; // 出栈     }      // 查找栈顶元素     public int top() {         return data[top];     }       // 查询最小值     public int min() {         return min;     } }

上述代码在 LeetCode 的执行结果如下:

找出栈中最小值的方法是什么

可以看出性能还是很高的,超越了 99.92% 的用户,内存消耗也不大。它的核心代码在 push 方法内,先将原最小值和最新最小值相继入栈,在 pop  出栈时判断出栈元素是否为最小值,如果是最小值则将当前最小值指向栈顶元素并将栈顶元素出栈,这样就得到了下一个新的最小值了。

实现代码2

如果我们不想使用数组的自定义栈来实现,还可以使用 Java 中自带的栈 Stack 来实现此功能,代码如下:

class MinStack { private Stackstack = new Stack<>(); private  int min = Integer.MAX_VALUE; public MinStack() { } // 入栈(添加元素) public void  push(int x) { if (x <= min) { // 遇到了更小的值,记录原最小值(入栈) stack.push(min); min = x;  } stack.push(x); } // 出栈(移除栈顶元素) public void pop() { if (stack.pop() == min) {  min = stack.pop(); // 取出原最小值 } } // 查找栈顶元素 public int top() { return  stack.peek(); } // 查询最小值 public int min() { return min; }}

上述代码在 LeetCode 的执行结果如下:

找出栈中最小值的方法是什么

从结果可以看出,使用 Java 中自带的栈的性能不如自定义数组的栈,但代码还是通过了测试。这种实现方式的优点就是代码比较简单,可以利用了 Java 自身的  api 来完成了最小值的查找。

这种实现代码的方式(使用 Java API),在刷题或者实际面试中如果没有特殊说明是可以直接用的。

“找出栈中最小值的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 找出栈中最小值的方法是什么

本文链接: https://lsjlt.com/news/84504.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 找出栈中最小值的方法是什么
    本篇内容介绍了“找出栈中最小值的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!题目定义栈的数据结...
    99+
    2024-04-02
  • 怎么找出栈中的最小值
    本篇内容主要讲解“怎么找出栈中的最小值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么找出栈中的最小值”吧!题目定义栈的数据结构,请在该类型中实现一个能够得到...
    99+
    2024-04-02
  • python怎么找出list最大值最小值
    可以使用内置的max()和min()函数来找出列表的最大值和最小值。 例如,假设有一个列表nums: nums = [5, 2, 9...
    99+
    2024-02-29
    python
  • java求最大值和最小值的方法是什么
    在Java中,可以使用以下方法来求最大值和最小值: 求最大值: int[] nums = {3, 6, 2, 8, 4}; in...
    99+
    2024-03-07
    java
  • python怎么找出列表最大值和最小值
    Python中可以使用内置函数max()和min()来找出列表的最大值和最小值。 示例代码如下: my_list = [4, 2, ...
    99+
    2024-02-29
    python
  • JavaScript如何找出数组的最大值和最小值
    这篇文章将为大家详细讲解有关JavaScript如何找出数组的最大值和最小值,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。找出数组的最大值和最小值可以使用for循环遍历数组的每个值,从而找到最大值或最小值...
    99+
    2023-06-27
  • js如何查找json数据中的最大值和最小值方法
    目录js查找json数据中的最大值和最小值使用Math对象来获取最大值和最小值使用for循环来获取最大值和最小值获取最大值和最小值返回对应的json数据用reduce()获取JSON...
    99+
    2023-05-16
    js查找json数据 查找json数据最大值 查找json数据最小值
  • oracle两个字段取最小值的方法是什么
    在Oracle数据库中,如果您想取两个字段的最小值,可以使用LEAST函数。该函数会返回参数列表中的最小值。 以下是一个详细示例: ...
    99+
    2024-03-11
    oracle
  • vb怎么找出数组中的最大值
    要找出数组中的最大值,可以使用循环遍历数组,比较每个元素的大小,记录下最大的值。可以使用以下代码来实现:```vbDim array...
    99+
    2023-10-12
    vb
  • python求最大值的方法是什么?
      Python怎么输出三个数的最大的数Python求最大值的方法是什么本篇文章,通过实操案例为大家详细介绍一下,希望各位小伙伴认真看完哦。   1、if判断   使用if流程语句依次判断三个数之间的大小,示例如下:   num1=f...
    99+
    2023-10-04
    python Powered by 金山文档
  • mongodb查最大值的方法是什么
    在 MongoDB 中,可以使用 `find()` 方法结合 `sort()` 方法来查找集合中的最大值。首先,使用 `find()...
    99+
    2023-09-12
    mongodb
  • MySQL怎么查找某列的最大值和最小值
    要查找某列的最大值和最小值,可以使用以下查询语句: SELECT MAX(column_name) AS max_value...
    99+
    2024-03-06
    MySQL
  • mysql求最大值、最小值和平均值的函数是什么
    这篇文章给大家分享的是有关mysql求最大值、最小值和平均值的函数是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。在mysql中,可以分别使用MAX()函数、MIN()函数和...
    99+
    2024-04-02
  • Python找出list中最常出现元素的方法
    本文实例讲述了Python找出list中最常出现元素的方法。分享给大家供大家参考,具体如下: 假设一个list中保存着各种元素,需要统计每个元素出现的个数,并打印出最常出现的前三个元素分别是什么。list如...
    99+
    2022-06-04
    最常 元素 方法
  • linux找出子目录的方法是什么
    这篇文章主要介绍“linux找出子目录的方法是什么”,在日常操作中,相信很多人在linux找出子目录的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux找出子目录的方法是什么”的疑惑有所帮助!...
    99+
    2023-07-05
  • JavaScript中二叉树如何实现查找最小值、最大值、给定值算法
    小编给大家分享一下JavaScript中二叉树如何实现查找最小值、最大值、给定值算法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体如下:function Node(data,...
    99+
    2024-04-02
  • php怎么输出数组的最大值和最小值
    要输出数组的最大值和最小值,可以使用PHP内置的max()和min()函数。示例代码如下:```php$arr = [1, 2, 3...
    99+
    2023-10-10
    php
  • sqlserver输出变量值的方法是什么
    在SQL Server中,可以通过使用PRINT语句来输出变量的值。下面是一个示例: DECLARE @myVariable INT...
    99+
    2024-04-09
    sqlserver
  • Java查找 List 中的最大最小值实例演示
    以下实例演示了如何使用 Collections 类的 max() 和 min() 方法来获取List中最大最小值:import java.util.*;public class Main { public static void main...
    99+
    2023-05-31
    java list值 ava
  • 使用JavaScript怎么遍历查找数组中最大值与最小值
    本篇文章给大家分享的是有关使用JavaScript怎么遍历查找数组中最大值与最小值,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体如下:&l...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作