我知道这个标题真的很糟糕,但我花了大约10分钟的时间想出一种简洁的方式来描述我的问题,但我做不到,这个程序应该创建一个numUnique()静态方法,它返回数组中唯一数字的数量。因此,例如,如果我有一个包含{2,4,2,7,16,4}的数组,唯一数字的数量将是4 (2,4,7和16)。
我正在编写代码来查找数组中的重复项,然后我意识到,当我有重复项时,我不知道如何处理它,我一直在绞尽脑汁想出一个解决方案,但我不能。
以下是到目前为止的代码:
public class Unique {
public static void main(String[] args) {
int[] numbers = {1, 6, 2, 14, 6, 8, 2, 1, 23};
numUnique(numbers);
}
public static void numUnique(int[] array){
Arrays.sort(array);
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] == array[j])
//code here
}
}
}
}
发布于 2019-05-23 08:40:53
我的理解是,您应该计算(而不是全部返回)数组中唯一元素的数量。您正在尝试向下查看所有内容,但这足以跟踪重复项的数量。这段代码查看当前条目是否与之前的条目重复(这是因为您进行了排序,这是一个很好的步骤)。
import java.util.Arrays;
public class Unique {
public static void main(String[] args) {
int[] numbers = {
1,
6,
2,
14,
6,
8,
2,
1,
23
};
System.out.println(numUnique(numbers));
}
public static int numUnique(int[] array) {
Arrays.sort(array);
int dups = 0;
for (int i = 1; i < array.length; i++) {
if (array[i] == array[i - 1]) {
dups++;
}
}
return (array.length - dups);
}
}
发布于 2019-05-23 09:01:57
如果您希望保留到目前为止的代码并对列表进行排序,有两个似乎有意义的选择。其中一个是返回唯一整数的数量,另一个是返回唯一整数的列表。
返回唯一数的个数:
public static int numUnique(int[] array) {
ArrayList<Integer> uniques = new ArrayList<>();
Arrays.sort(array);
uniques.add(array[0]);
int prev = array[0];
for (int i = 1; i < array.length; i++) {
if(array[i] != prev){
uniques.add(array[i]);
prev = array[i]
}
}
return uniques.size();
}
返回唯一编号列表,只需要返回唯一编号列表,而不需要.size()。
如果需要数组而不是列表,则需要返回以下内容:
return uniques.toArray(new Integer[list.size()]);
发布于 2019-05-23 09:06:57
如果您正在使用数组,为什么不进一步探索它呢
private static long numUnique(int[] numbers) {
return Arrays.stream(numbers).distinct().count();
}
https://stackoverflow.com/questions/56266553
复制相似问题