当前位置: 首页 > 面试题库 >

数组中最常见的值

盖嘉庆
2023-03-14
问题内容

我将如何查找数组中三个最常见的元素?我正在使用长度为10,000的数组,元素为0-100之间的随机整数。

我正在考虑使用两个数组,其中一个长度为100,并且仅通过使用if语句来递增。但是,我想知道是否有一种方法只能使用一个for / if
loop(statement)来查找这些值。


问题答案:

如果要通过列表中的固定次数进行此操作,则需要第二个数据结构。

如果该集合中的值有上限和下限,并且这些值相对密集,则计数器数组是一个很好的解决方案。

否则,最好使用Map<Integer, Integer>,其中键是集合的元素,而值是计数器。

分析

如果在开始之前没有上限/下限,那么您就不知道要分配的大量计数器。因此,您必须对数组进行初步遍历以找到边界…,现在有了两遍解。

如果您确实有上限和下限,但集合稀疏,则初始化计数数组的成本+找到三个最大计数的成本将主导计算集合元素的成本。如果差异足够大(即输入很大且非常稀疏),则HashMap将更快并且占用更少的内存

或者

如果允许您更改数组,则可以按升序对其进行排序O(NlogN),然后在经过排序的数组上一次遍历即可找到三个最常见的元素。



 类似资料:
  • 问题内容: 所以我有这个JSON数组: 我将在实际的JSON文件中包含更多值。但是通过查看此内容,我可以看到238和55的重复次数比任何其他数字都多。我想做的是获取数组中前5个最重复的值,并将它们存储在新的PHP数组中。 问题答案: 获取每个项目出现在数组中的次数计数 按出现次数对数组进行反向排序 获取实际值,该值是结果中的数组键 给我们结果的前五个要素 演示版

  • 问题内容: 我需要在数组中找到最常见的(模态)元素。 我能想到的最简单的方法是为每个唯一元素设置变量,并为每个元素分配一个计数变量,每次将其记录在遍历数组的for循环中时,该变量都会增加。 不幸的是,数组的大小是未知的,并且会很大,所以这种方法是没有用的。 我在Objective- C中遇到了类似的问题,该问题使用NSCountedSet方法对数组元素进行排名。不幸的是,我对编程非常陌生,只能将第

  • 问题内容: 我有一个具有以下结构的行表,其中每一行都有每个人喜欢的颜色和该人所属组的列表。我如何返回每个组中最常见的颜色的列表? 您可以组合设置重叠,获取交点然后进行其他计数和排名吗? 问题答案: 快速而肮脏: 一个更好 [`LATERAL JOIN`](http://www.postgresql.org/docs/current/interactive/sql-select.html) 在Pos

  • 前言 数组在实战开发中,使用得相当频繁。前端同学通过接口拿到json数据后,往往需要把数据进行各种形式的变换和展示。这个时候,数组的常见操作,就发挥了很大的作用。 如果你对数组的基础知识不太熟悉,建议回去看看03-JavaScript的基础知识。 掌握了基础知识之后,我们再来看看,实战开发中,数组都有哪些常见操作。 数组的常见操作 从对象数组中,将属性的值提取为数组 一般人可能会想着通过 for

  • 前言 数组的常见方法如下: 方法 描述 备注 slice() 从数组中提取指定的一个或多个元素,返回结果为新的数组 不会改变原数组 splice() 从数组中删除指定的一个或多个元素,返回结果为新的数组 会改变原数组 concat() 连接两个或多个数组,返回结果为新的数组 不会改变原数组 join() 将数组转换为字符串,返回结果为转换后的字符串 不会改变原数组 reverse() 反转数组,返