[英]Java ( Counting Distinct Integers )
例如,如何返回数组中不同/唯一值的数量
int[] a = {1,2,2,4,5,5};
Set<Integer> s = new HashSet<Integer>();
for (int i : a) s.add(i);
int distinctCount = s.size();
一个集合将每个唯一(由.equals()定义)元素存储在其中一次,您可以使用它来简化问题。 创建一个Set(我将使用HashSet),迭代您的数组,将每个整数添加到Set中,然后返回Set的.size()。
一种有效的方法:使用Arrays.sort
对数组进行Arrays.sort
。 编写一个简单的循环来计算相邻的相等值。
真正取决于数组中元素的数量。 如果您不处理大量整数,则HashSet或二叉树可能是最好的方法。 另一方面,如果您有大量由不同整数组成的数组(例如,超过十亿),则分配2 ^ 32/2 ^ 8 = 512 MB的字节数组(每个位代表存在或不存在)可能是有意义的-整数的存在,然后最后计数设置的位数。
二叉树方法将花费n * log n时间,而数组方法将花费n时间。 另外,二叉树每个节点需要两个指针,因此您的内存使用量也会高很多。 类似的考虑也适用于哈希表。
当然,如果您的集合很小,则只需使用内置的HashSet。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.