有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Java streams从int数组中获取缺少的数字

我有以下数组

int [] a = {5,3,10,8,4,2,9,6};

我正试图从数组中找到丢失的数字

private static int getMissingNumber(int[] a) {
    int expectedSum = IntStream.rangeClosed(1, 10)
            .reduce(0, Integer::sum);
    int actualSum = Arrays.stream(a).reduce(0, Integer::sum);

    return expectedSum-actualSum;
}

但是得到的是8而不是7。我错过了什么


共 (3) 个答案

  1. # 1 楼答案

    从1到10的数字之和是10*(10+1)/2=55。缺少1和7,所以缺少的数字之和是8。我觉得不错

  2. # 2 楼答案

    你的最小值是2,所以应该是范围的开始IntStream.rangeClosed(2, 10)

    你也可以直接在IntStream上调用.sum()

    private static int getMissingNumber(int[] a) {
        return IntStream.rangeClosed(2, 10).sum() - Arrays.stream(a).sum();
    }
    
  3. # 3 楼答案

    你需要使用2而不是1

    IntStream.rangeClosed(2, 10)

    还可以使用summaryStatistics()在数组中查找最小和最大元素

    private static int getMissingNumber(int[] a) {
        IntSummaryStatistics summaryStatistics = Arrays.stream(a).summaryStatistics();
        int expectedSum = IntStream.rangeClosed(summaryStatistics.getMin(), summaryStatistics.getMax())
                .sum();
        int actualSum = (int) summaryStatistics.getSum();
    
        return expectedSum-actualSum;
    }