我正在尝试解决这个问题,但我不知道如何......
Values[10] = {1,1,4,4,2,3,3,2,1,3}
打印:
{1,2,3,4} or {1,4,2,3} (not sorted, any order, but distinct)
我还需要计算每个数字出现的次数,都没有排序、新数组或 boolean 方法或其他数据结构,请告知我,因为我被卡住了。
有没有一种简单的方法可以用来打印唯一值/不同值?
最佳答案
如果你愿意摧毁你当前的阵列,这是可以完成的。并且您假设该数组是 Integer 类型(因此可为空),或者如果不是,则存在某种界限,例如所有 int 都是正数,因此您可以使用 -1
。
for(int i = 0; i < values.length; i++){ //for entire array
Integer currVal = values[i]; // select current value
int count = 1; // and set count to 1
if(currVal != null){ // if value not seen
for( int j = i + 1; j < values.length; j++){ // for rest of array
if(values[j] == currVal){ // if same as current Value
values[j] = null; // mark as seen
count++; // and count it
}
}
System.out.print("Number : " + currVal + " Count : " + count + "\n");
//print information
}
// if seen skip.
}
用简单的英语来说,分 2 次循环遍历数组,大约需要 O(n^2) 时间。 转到索引 i。如果尚未看到索引(不为空),则遍历数组的其余部分,标记与所见值相同的任何索引(使其为空)并递增计数变量。在循环结束时打印值和计数。如果已看到索引(为空),则跳过并转到下一个索引。在两个循环结束时,所有值都将保留为空。
Input : Values[] = {1,1,4,4,2,3,3,2,1,3}
Output : Values[] = {1,null,4,null,2,3,null,null,null,null}
Number : 1 Count : 3
Number : 4 Count : 2
Number : 2 Count : 2
Number : 3 Count : 3
编辑:纠正了评论者指出的输出错误。
关于Java重复不同的唯一数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11906287/