首页 > 解决方案 > 一种使用循环计算数组中唯一元素的方法(Java)

问题描述

我正在尝试制作一种计算数组中唯一元素数量的方法。例如,如果数组包含 [1,2,3,4,5,1,5],则有 3 个唯一元素,我的方法应返回数字 3。

这是我到目前为止所得到的:

static int numberOfUniqueIntegers(int[] number, int len) {
    int unique = 0;
    for (int i = 0; i < len; i++){
        int j;
        for (j = 0; j < i; j ++) {
            if (number[i] == number[j]) {
                break;
            }
        }
        if (i == j);
        unique++;
    }

    return unique;

}

该方法接受数组编号和一个整数len(这是数组的长度)。

但在这种情况下: [1,2,3,4,5,1,5] 我的方法将返回 5,而不是 3。我不知何故需要检查该数字之前是否重复过,如果不是unique++

标签: javaarraysunique

解决方案


您可以创建一个频率Map,然后获取仅出现一次的键的数量。

static int numberOfUniqueIntegers(int[] number) {
    Map<Integer, Long> freq = Arrays.stream(number).boxed().collect(
       Collectors.groupingBy(x -> x, Collectors.counting()));
    return (int) freq.entrySet().stream().filter(e -> e.getValue().equals(1L))
        .map(Map.Entry::getKey).count();
}

Demo


推荐阅读