我可以考虑对它们进行排序,然后逐个遍历每个元素,但这是nlogn。有没有一种线性方法来计算列表中的不同元素?
更新:-独特与独特
如果您正在寻找 “唯一” 值(例如,如果您多次看到“ JASON”元素,那么该元素将不再是唯一的,因此不应计数)
您可以使用HashMap在线性时间内做到这一点;)
(广义的/与语言无关的想法是哈希表)
HashMap / Hash表的每个条目都是<KEY, VALUE>一对,其中键是唯一的(但对中的对应值没有限制)
<KEY, VALUE>
第1步:
遍历列表中的所有元素一次: O(n)
第2步:
遍历HashMap并计算KEY值等于1(因此唯一)的 O(n)
分析:
但是,如果要查找 “不同”的 值(例如,如果要计算有多少个 不同的 元素),请使用HashSet而不是HashMap / Hash表,然后简单地查询HashSet的大小。