计算数组中的唯一值(Java)

之前有人问过,我知道,但我真的不知道为什么我的代码不起作用。我试图弄清楚未定义数组中有多少个唯一值。(即 {0, 0, 1, 1, 1, 5, 5, 6, 6, 7} 应返回值 5。这是我目前所拥有的:

public static int numUnique(double[] list) {
    int counter = 0;
    
    for(int i = 0; i < list.length; i++) {
        for(int j = i + 1; j < list.length; j++) {
            if(list[i] != list[j])
                counter ++;
        }
    }
    
    
    return counter;
}

回答

假设数组已排序,您应该只检查每个元素是否不等于紧随其后的元素。计数器也应初始化为,1因为如果所有元素都相同,则唯一元素的数量为1。我们还需要添加对null或 空数组的检查,其结果为0。(如果它没有排序,你可以用Arrays.sort它来排序,但这不是最快的方法。)

public static int numUnique(double[] list) {
    if(list == null || list.length == 0) return 0;
    int counter = 1;
    
   for(int i = 1; i < list.length; i++)
       if(list[i - 1] != list[i]) ++counter;
    
    
    return counter;
}

替代方法包括 usingStream#distinct或 a Set,它们不依赖于 order *

System.out.println(java.util.Arrays.stream(array).distinct().count());

或者

System.out.println(java.util.stream.IntStream.of(array).distinct().count());

*LinkedHashSet实现为您提供可预测的迭代顺序。


以上是计算数组中的唯一值(Java)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>