Java 如何计算数组中出现的唯一值的数量
但有几个限制Java 如何计算数组中出现的唯一值的数量,java,arrays,loops,Java,Arrays,Loops,但有几个限制 无法创建任何其他数据结构,如数组、字符串等 无法修改作为参数传递给方法的数组,最后 无法对数组元素值进行排序或重新排列 我已经编写了这个解决方案,但它修改了作为参数传递给方法的数组 最有效的解决方案是将所有元素添加到HashSet并返回HashSet的大小。这将需要O(n)时间。但是,不允许使用“其他数据结构” 如果没有集合,您可以使用嵌套循环来查找O(n^2)时间中唯一元素的数量 int count = 0; for (int i = 0; i < arr.length;
最有效的解决方案是将所有元素添加到
HashSet
并返回HashSet
的大小。这将需要O(n)
时间。但是,不允许使用“其他数据结构”
如果没有集合
,您可以使用嵌套循环来查找O(n^2)
时间中唯一元素的数量
int count = 0;
for (int i = 0; i < arr.length; i++) {
boolean unique = true;
for (int j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
unique = false;
break;
}
}
if (unique) {
count++;
}
}
return count;
这是一个简单的计数
对循环使用嵌套的
外部循环迭代数组arr[i]
中的每个元素,而内部循环迭代i
第四个元素之前的所有元素。如果在内部循环中有以前见过的元素,我们不计算它(通过将duplicate
标志设置为true),否则,我们计算它(count++
)
请注意,我们存在所有约束:
仅使用了1个int变量,计数
数组没有被修改
没有进行分类或重新排列
public int countreplicates(int[]arr){
整数计数=0;
对于(int i=0;ii如果您不能使用任何其他数据结构,为什么要使用Map
?您包含了countDuplicates()
的代码,但包含了countUnique()
的输出。如果问题是关于countUnique()
,您应该发布该方法。请澄清您的问题,解释为什么不允许使用map,以及当您的代码不修改它时如何更改数组。例如,很抱歉,复制了错误的codeMap是一种数据结构。在您的代码中,您正在使用它,并且您说您不能使用它。@Andreas my bad.Thanks!这个解决方案解决了我的问题@Omri
1. countUnique({1, 0, 1, 0, 1})
2. expected result : 2
3. my resuly : 2
4. expected array after method call : {1, 0, 1, 0, 1}
5. array after method call : {-2147483648, -2147483648, -2147483648, -214748364...}
6. error : incorrect parameter value(s) after method call
int count = 0;
for (int i = 0; i < arr.length; i++) {
boolean unique = true;
for (int j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
unique = false;
break;
}
}
if (unique) {
count++;
}
}
return count;
return Arrays.stream(arr).distinct().count();
public int countDuplicates(int[] arr) {
int count = 0;
for(int i=0; i<arr.length; i++){
boolean duplicate = false;
for(int j=0; j<i; j++){
if(arr[i] == arr[j])
{
duplicate = true;
break;
}
}
if(!duplicate)
count++;
}
return count;
}