205.md 2.3 KB
Newer Older
W
wizardforcel 已提交
1 2 3 4
# 从 Java 中的序列/数组中查找缺失的数字

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

W
wizardforcel 已提交
5
[Java 访谈](https://howtodoinjava.com/java-interview-questions/)上,一个常见的难题是 – 从一系列数字或数组中找到缺失的数字。 这个难题已经在 Amazon.com 中问过。
W
wizardforcel 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

在这个 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

```

W
wizardforcel 已提交
48
## 查找电话号码的解决方案 – Java 8
W
wizardforcel 已提交
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

上面的代码虽然很简单,但是可以使用新语言功能(例如 [Java 8](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)