java - 仅使用 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
解决方案
具有O(n)时间复杂度的最大最短解决方案,仅使用 Java 8+ 内置 API,即不需要额外的库。
代码假定myarray
是int
、long
、double
或 对象1的数组。
long count = java.util.Arrays.stream(myarray).distinct().count();
1)对象必须具有有效equals()
和hashCode()
实施。
推荐阅读
- spring-security-oauth2 - "Full authentication is required to access this resource
- python - Getting AttributeError: __exit__ when working with Tensorflow and MNIST data
- c# - What is wrong with my aproach for detecting open serial port?
- sql - Comparing two latest rows and return true or false based on location_id
- excel - application function using index small if in order to find more than one matching result
- c# - 为什么我没有得到 EnvironmentVariable
- .net - Firebase 云函数:你可以从 dll 调用函数吗?
- sass - Is the a way to create a large list in SCSS?
- vectorization - Matrix multiplication with vectorization in c++
- java - 如何更改 JComboBox 的字体