我将如何找到数组中三个最常见的元素?我正在处理长度为 10,000 的数组,其元素 = 0-100 之间的随机整数。
我正在考虑使用两个数组,其中一个长度为 100,并且通过使用 if 语句来递增。但是,我想知道是否有一种方法可以仅使用一个 for/if 循环(语句)来查找这些值。
如果您要以恒定的次数遍历列表来执行此操作,则需要第二个数据结构。
如果该集合中的值有下限和上限,并且值相对密集,那么计数器数组是一个很好的解决方案。
否则,最好使用Map<Integer, Integer>
,其中键是集合的元素,值是计数器。
Analysis
如果在开始之前没有设置集合的下限/上限,那么您不知道要分配的计数器数组。因此,您必须对数组进行初步遍历以找到边界……现在您有一个两遍解决方案。
如果确实有下限和上限,但集合很稀疏,则初始化计数数组的成本 + 查找三个最大计数的成本将主导对集合元素进行计数的成本。如果差异足够大(即输入很大且非常稀疏),HashMap 将会更快并且占用更少的内存。
或者
如果允许更改数组,则可以将其按升序排序O(NlogN)
然后在排序数组上一次查找三个最常见的元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)