根据排名查找重复项

时间:2018-07-29 01:06:10

标签: php algorithm sorting duplicates numbers

一个具有两个参数(数组,排名)并返回数组的函数。

该函数应根据排名返回重复的数字,例如: 如果等级参数为5,则该函数将返回5个最多的重复数字,即使有10个重复的数字,该函数也应仅返回5个最重复的数字,因为等级= 5。

我正在寻找有效的解决方案O(N)来解决此问题。

我知道我们可以使用哈希映射进行计数,然后对其进行排序,然后将返回的数组限制为“ ranking”变量,但此解决方案不是O(N)。

1 个答案:

答案 0 :(得分:0)

您无需排序。计算完所有重复次数后,您只能遍历哈希映射,并且最多保留5次。

选项1

  1. 遍历填充哈希图的数组,Key是数字,值是出现的次数。 O(N)
  2. 然后,您需要一个数组,该数组的大小为等级值(r)。在这里您将存储头号。
  3. 然后,您只需遍历哈希映射O(N),并仅在其出现次数大于重复次数较少的O(R)出现次数时,才将其添加到数组中。在这里,您可以通过使用存储在数组中的值作为键来访问哈希图来访问外观数。对于哈希图中的每个条目,这将是r对哈希图的直接访问。
  4. 您在数组中拥有最高的r号。

O(N + RN)= O(RN) (这是最坏的情况。只有没有重复的数字,第3步的通过才会是N。如果有,则小于N,但这没关系)

选项2

与以前相同,但是在执行步骤1的同时执行步骤3。 您在第3步中跳过了哈希映射,但始终会执行O(RN)