Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java streams从int数组中获取缺少的数字_Java_Arrays_Java Stream - Fatal编程技术网

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

使用Java streams从int数组中获取缺少的数字,java,arrays,java-stream,Java,Arrays,Java Stream,我有以下数组 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

我有以下数组

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。我缺少什么?

您需要使用2而不是1

IntStream.rangeClosed(2,10)

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


最小值是
2
,因此应该是范围
IntStream.rangeClosed(2,10)

您还可以在
IntStream

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

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

我想要的正是这样的东西。所以数组可以从任意元素开始,可以有n个元素。谢谢。请将
.reduce(0,Integer::sum)
替换为
.sum()
。感谢您的帮助。我只想从2开始。我也在检查从20开始的数组。感谢您的帮助。如果使用较大的数组,请考虑使用上面的公式计算引用和(如果起始索引是可变的,则使用它两次)。它将更快,占用更少的内存。如果可以使用简单的公式计算结果,则无需使用流。如何使用上述公式和动态最小值。流可以一次性给我最小值、最大值和和。让m为最小值,n为最大值。然后s=(n*(n+1)-m*(m+1))/2。首先我已经找到了最小值和最大值,然后这很好。
{5,3,10,8,4,2,9,1}的预期输出是什么?我正在检查一个丢失的号码。这里缺少两个数字。是的,但是我们不应该假设输入总是正确的,不是吗?(特别是当它没有排序并且没有一个基本索引开始时)
private static int getMissingNumber(int[] a) {
    return IntStream.rangeClosed(2, 10).sum() - Arrays.stream(a).sum();
}