我可以考虑对它们进行排序,然后逐个遍历每个元素,但这是nlogn。是否有线性方法来计算列表中的不同元素?
答案 0 :(得分:8)
更新: - 独特与独特
如果您正在寻找“唯一”值(如果您看到一个元素“JASON”不止一次,那么它不再是唯一的,不应该被计算在内)
您可以使用HashMap;)
在线性时间内完成此操作(广义/语言不可知的想法是Hash table)
HashMap / Hash表的每个条目都是<KEY, VALUE>
对,其中键是唯一的(但对其对应的值没有限制)
第1步:
迭代列表中的所有元素: O(n)
<强>步骤2:强>
遍历HashMap并计算KEYS,其VALUE等于1(因此是唯一的) O(n)
<强>分析:强>
但是,如果您正在寻找“distinct”值(如果您想要计算有多少不同的元素),请使用{{3而不是HashMap / Hash表,然后简单地查询HashSet的大小。
答案 1 :(得分:0)
你可以调整this extremely cool O(n)-time and O(1)-space in-place algorithm来删除重复计算不同值的任务 - 只需计算最终O(n)传递中等于sentinel值的值的数量,然后从大小中减去清单。
答案 2 :(得分:0)