查找数组中最频繁和最不频繁的元素2025 年 1 月 5 日 | 阅读 9 分钟 在此问题中,给定一个整数数组。我们需要找到数组中出现次数最多的元素和出现次数最少的元素。如果有多个元素具有相同的最高或最低频率,我们可以返回其中任何一个元素。 让我们来看一些例子来理解这个问题 输入: arr = [2, 3, 2, 2, 4, 2] 输出 2 解释: 2 出现 4 次,而 3 和 4 只出现一次。因此,出现频率最高的元素是 2 输入: arr = [2, 3, 2, 2, 4, 2, 3, 3, 4, 3] 输出: 3 或 2 解释: 在这个数组中,2 和 3 出现的次数最多。因此,输出可以是其中任何一个。 输入: arr = [2, 3, 2, 2, 4, 2] 输出: 3 或 4 解释: 3 和 4 在数组中都只出现一次 方法 - 1解决此问题最基本的方法是运行两个循环。第一个循环遍历每个数组元素。在第二个循环中,计算外层循环当前元素的频率。我们可以跟踪最大频率和最大频率对应的元素。当外层循环完成后,我们将得到出现频率最高的元素及其频率。 代码 输出 2 时间复杂度:- 这种方法的时间复杂度是非线性或二次的,因为我们对整个数组使用了两个循环。因此,总时间复杂度为 O(N ^ 2)。 辅助空间: 我们没有使用额外的空间,因此空间复杂度为常数,即 O(1)。 通过进行微小的修改,使代码能够找到出现频率最低的元素。为了找到出现频率最低的元素,我们将在外层循环结束后查找最低频率计数。我们将检查当前计数是否小于最低频率计数。如果是,我们将更新最低频率计数和对应的元素。 代码 输出 4 方法 - 2# 我们可以通过对数组进行排序来优化上述方法。如果对数组进行排序,我们可以用一个单独的循环找到答案。在每次迭代中,我们将检查当前频率是否超过最大频率,然后更新最大频率。 代码 输出 2 时间复杂度: 对数组进行排序的时间复杂度为 O(log n)。线性 for 循环的时间复杂度为 O(n)。因此,最终的时间复杂度为 O(n + log n)。 辅助空间: 我们没有使用额外的空间,因此空间复杂度为常数,即 O(1)。 现在,我们将看到如何使用相同的逻辑来找到出现频率最低的元素。为了找到出现频率最低的元素,我们将检查当前计数是否小于迄今为止的最低频率计数。如果是,我们将更新最低频率计数和对应的元素。 代码 输出 4 方法 - 3我们可以使用哈希技术进一步降低解决方案的时间复杂度。我们将创建一个哈希表,其中包含数组中的不同元素以及给定数组中特定元素出现的次数。我们将使用键值对来存储,其中键是不同的元素,值是键元素的频率。最后,我们将遍历哈希表并找到出现频率最高的元素。 代码 输出 2 时间复杂度: 我们在此问题中使用了两个线性循环;因此,时间复杂度将是线性的,即 O(n)。 辅助空间: 我们使用了额外的空间来存储哈希表;因此,此解决方案的空间复杂度为 O(n)。 为了找到出现频率最低的元素,我们将在哈希表中搜索最低频率,并返回相应的元素。 代码 输出 4 方法 - 4解决此问题的一个更有效的方法是使用摩尔投票算法。 在摩尔投票算法中,我们将任何数组元素假定为结果。然后,我们遍历整个数组并进行投票。在投票过程中,如果我们发现当前元素与假定的结果相同,则增加计数;否则,如果当前元素不同,则减少频率计数。如果在循环的任何时候计数变为零,则意味着当前的假定结果不是答案,我们将假定结果更新为循环的当前元素。通过这种方式,当循环完成时,我们将得到获得最多票数的元素;因此,它将是我们期望的输出。 下面是展示如何执行摩尔投票算法并解决此问题的 Python 代码。 代码 输出 3 时间复杂度: 我们使用了一个线性 for 循环在元素之间进行投票。因此,此解决方案的时间复杂度将是线性的,即 O(n)。 辅助空间: 在此解决方案中,我们没有使用任何额外的空间;因此,空间复杂度将是常数,即 O(1)。 下一个主题在 Python 中查找从根到节点的路径 |
在算法和问题解决的世界里,硬币找零问题是一个经典。它是动态规划领域的一个基本问题,动态规划是计算机科学的一个分支,它通过将复杂问题分解为更简单的子问题来解决复杂问题。在本文中,...
阅读 3 分钟
基于颜色的特征用于物体检测是一种简单的方法,它利用感兴趣物体的独特颜色特性来识别其在图像或视频中的位置。该过程包括图像过滤,使用复制功能掩盖感兴趣的物体...
阅读 8 分钟
简介 Wand 是一个由 ImageMagick 软件套件包装的 Python 库。对于在各种应用程序中处理图像的开发人员来说,ImageMagick 是一套强大的图像修改工具。Wand 提供了一个易于使用的 Python 接口来与 ImageMagick 交互,使用户能够完成复杂的...
阅读 3 分钟
简介:在本教程中,我们将学习如何在 Python 中解压一个元组列表。Python 是一种众所周知的编程语言,在全球范围内用于多种目的,如机器学习、Web 开发和数据科学,并支持许多不同的过程。元组是一种有用的...
阅读9分钟
随着我们越来越接近现代,在线支付的做法变得越来越流行。在线支付对客户特别有利,因为它消除了免费资金的问题并节省了时间。此外,我们不需要货币来...
阅读 8 分钟
该算法,有时也称为等距映射,是早期用于流形学习的方法之一。思考 isomap 的一种方法是将其视为核 PCA 或多维尺度 (MDS) 的延续。它寻找一个低维嵌入,该嵌入可以保留所有点对点测地线...
阅读 4 分钟
引言 Apache Spark 已被证明是理想且有用的对大数据进行处理的框架。PySpark,即 Apache Spark 的 Python API,为开发人员提供了利用此处理工具的无缝能力。PySpark 中可用的 DataFrame API 与 Pandas 类似...
阅读 10 分钟
引言:三对角线矩阵算法,也称为 Thomas 算法,是一种用于求解具有特定结构方程组的方法。这些称为系统的系统由矩阵组成,其中大多数元素为零,只有主对角线及其相邻的邻居...
阅读 6 分钟
简介 要在 Python 中查找以弧度表示的角度的切线,请使用 math.tan() 函数,它是内置 math 模块的一个组件。它接受单个输入,即以弧度表示的角度,并输出角度的切线作为浮点数。此函数在...
阅读 3 分钟
?字符转义简介 在编程中,尤其是在 Python 中,字符串是用于表示文本的字符序列。有时,在这些字符串中,您希望包含用于特定目的的特殊字符,如换行符或制表符。要在不影响字符串'的情况下记住这些字符...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India