我需要一个帮助来制作一个解决一个问题的算法:有一行数字在行中出现不同的时间,我需要找到最多出现的数字以及它在行中的次数,例如:
1-1-5-1-3-7-2-1-8-9-1-2
这将是1,它出现5次.
算法应该很快(这是我的问题).有任何想法吗 ?
Ars*_*yan 10
您可以保留哈希表并存储该结构中每个元素的计数,如下所示
h[1] = 5
h[5] = 1
...
Run Code Online (Sandbox Code Playgroud)
你不能比线性时间更快地得到它,因为你需要至少查看每个数字一次.
如果您知道数字在某个范围内,您可以使用其他数组来总结每个数字的出现次数,否则您需要一个稍微慢一点的哈希表.
这两个都需要额外的空间,你需要在最后再次遍历计数以获得结果.
除非你真的有大量的数字并且绝对需要O(n)运行时,否则你可以简单地对数组进行排序.然后,您可以遍历数字,只需将当前数字和数字的计数与两个变量中出现的最大值保持一致.所以你节省了很多空间,用一点时间来换取它.