查找数组中唯一数字的最佳方法

时间:2011-06-07 15:40:10

标签: algorithm

查找数组中唯一数字的最佳方法是什么。一种方法是将它们添加到HashSet,然后找到hashset的大小。有没有比这更好的方法。

我只需要唯一数字的数量。它们的频率不是必需的。

感谢任何帮助。

谢谢, 哈里什

4 个答案:

答案 0 :(得分:3)

对于您愿意接受的较少cpu周期,内存的权衡是什么?哪个对您的最佳解决方案更重要? counting sort的变体在空间上效率非常低,但速度非常快。

对于较大的数据集,您可能希望使用散列,这是hashset已经执行的操作。假设你愿意承担实际存储数据的开销,那就按照你的想法去做吧。它具有额外的优点,即可以使用合适的标准库在任何语言中实现更简单。

答案 1 :(得分:2)

你没有说出有关这些数字的知识,但如果1)它们是整数,2)你知道范围(最大和最小)和3)范围不是太大,那么你可以分配一个长度与天花板相等的整数数组(范围/ 32)(假设32位整数)全部初始化为零。然后浏览数据集并将每个数字对应的位设置为1.最后,只计算1位数。

答案 2 :(得分:1)

一个简单的算法是循环遍历列表,如你所说,将数字添加到哈希集,但每次都检查它是否已经在集合中,如果没有,则为运行计数添加1。然后,当您完成循环遍历列表时,您将在运行计数的最终值中包含不同元素的数量。这是一个python示例:

count=0
s=set()
for i in list:
    if i not in s:
        s.add(i)
        count+=1

编辑:我使用运行计数而不是检查集合的长度,因为在后台,集合可能被实现为稀疏数组,并且可能需要在该数组上的额外循环来检查每个散列是否具有相应的值。运行计数避免了潜在的额外开销。

答案 3 :(得分:0)

我建议先对数组进行排序,然后寻找独特的元素。