首页 > 解决方案 > 仅使用 java 中的循环和数组计算 O(n) 中数组中的不同元素

问题描述

我找到了这个解决方案

https://www.geeksforgeeks.org/count-distinct-elements-in-an-array/

问题是时间复杂度必须为 O(n),空间复杂度必须为 O(1),但我不能导入任何额外的库并且代码必须尽可能短。我无法找到比 O(nlog n) 更快排序的解决方案,所以我想我需要找到一个聪明的方法。答案是上面链接中的第三个解决方案,但它需要额外的库。甚至有可能找到更好的方法吗?

编辑:

事实上,我需要创建一个完全一样的函数 java.util.Arrays.stream(myarray).distinct().count();

它必须具有 O(n) 的时间复杂度和 O(1) 的空间复杂度。基本上我必须只使用循环数组if 语句来创建它。此外,禁止导入任何东西import java.util.Scanner;,因为我不能用任何现成的方法来做到这一点,比如java.util.Arrays.*;.

例如:

输入:

{1,12,3,0,1,3,15,6}

输出:

6

标签: javaarrays

解决方案


具有O(n)时间复杂度的最大最短解决方案,仅使用 Java 8+ 内置 API,即不需要额外的库

代码假定myarrayintlongdouble或 对象1的数组。

long count = java.util.Arrays.stream(myarray).distinct().count();

1)对象必须具有有效equals()hashCode()实施。


推荐阅读