2

例如,您如何返回数组中不同/唯一值的数量

int[] a = {1,2,2,4,5,5};
4

4 回答 4

13
Set<Integer> s = new HashSet<Integer>();
for (int i : a) s.add(i);
int distinctCount = s.size();
于 2009-09-26T21:43:02.540 回答
4

一个集合只将每个唯一(由 .equals() 定义)元素存储在其中一次,您可以使用它来简化问题。创建一个集合(我会使用 HashSet),迭代你的数组,将每个整数添加到集合中,然后返回集合的 .size()。

于 2009-09-26T21:42:20.900 回答
3

一种有效的方法:使用 对数组进行排序Arrays.sort。编写一个简单的循环来计算相邻的相等值。

于 2009-09-26T21:45:05.860 回答
2

真的取决于数组中元素的数量。如果您不处理大量整数,则 HashSet 或二叉树可能是最好的方法。另一方面,如果您有一个包含不同整数的大型数组(例如,超过 10 亿个),分配一个 2^32 / 2^8 = 512 MByte 字节数组可能是有意义的,其中每个位代表存在或不存在- 存在一个整数,然后计算最后设置的位数。

二叉树方法需要 n * log n 时间,而数组方法需要 n 时间。此外,二叉树每个节点需要两个指针,因此您的内存使用量也会高得多。类似的考虑也适用于哈希表。

当然,如果您的集合很小,那么只需使用内置的 HashSet。

于 2009-09-26T21:58:18.877 回答