# 从 Java 中的序列/数组中查找缺失的数字

> 原文： [https://howtodoinjava.com/puzzles/find-missing-number-from-series/](https://howtodoinjava.com/puzzles/find-missing-number-from-series/)

在 [Java 面试](https://howtodoinjava.com/java-interview-questions/)上，一个常见的难题是 – 从一系列数字或数组中找到缺失的数字。 这个难题已经在 Amazon.com 中问过。

在这个 Java 难题中，您有一系列数字开头（例如 1….N），而该系列中恰好缺少一个数字。 您必须编写一个 **Java 程序来查找**系列中的缺失数字。

## 查找电话号码的解决方案

出乎意料的是，仅当您已经知道该难题的解决方案时，它才非常简单。

1.  计算`A = n (n+1)/2`，其中 n 是序列 1…N 中的最大数。
2.  计算 B =给定序列中所有数字的总和
3.  缺少号码= A – B

让我们用代码编写解决方案。

```java
public class FindMissingNumber {
	public static void main(String[] args) {
		//10 is missing
		int[] numbers = {1,2,3,4,5,6,7,8,9, 11,12};

		int N = 12;
		int idealSum = (N * (N + 1)) / 2;
		int sum = calculateSum(numbers);

		int missingNumber = idealSum - sum;
		System.out.println(missingNumber);
	}

	private static int calculateSum(int[] numbers) {
		int sum = 0;
		for (int n : numbers) {
			sum += n;
		}
		return sum;
	}
}

Output:

10

```

## 查找电话号码的解决方案 – Java8

上面的代码虽然很简单，但是可以使用新语言功能（例如 [Java8](https://howtodoinjava.com/java-8-tutorial/) 中的 [lambda](https://howtodoinjava.com/java8/complete-lambda-expressions-tutorial-in-java/) ）减少许多行。 让我们看看如何？

```java
import java.util.Arrays;

public class FindMissingNumber {
	public static void main(String[] args) {
		//10 is missing
		int[] numbers = {1,2,3,4,5,6,7,8,9, 11,12};

		int N = 12;
		int idealSum = (N * (N + 1)) / 2;
		int sum = Arrays.stream(numbers).sum();

		int missingNumber = idealSum - sum;
		System.out.println(missingNumber);
	}
}

Output:

10

```

这样的难题很容易解决，但是在任何面试中问清楚解决方案总是很有用的。 因此，准备在下一次面试中找到数组中缺少的数字。

学习愉快！

参考： [SO 线程](https://stackoverflow.com/questions/2113795/quickest-way-to-find-missing-number-in-an-array-of-numbers)