原文: https://howtodoinjava.com/puzzles/find-missing-number-from-series/
在 Java 面试上,一个常见的题目是 – 从一系列数字或数组中找到缺失的数字。 这个题目已经在 Amazon 中问过。
在这个 Java 题目中,您有一系列数字开头(例如1…N),而该系列中恰好缺少一个数字。 您必须编写一个 Java 程序来查找系列中的缺失数字。
查找数字的解决方案
出乎意料的是,仅当您已经知道该题目的解决方案时,它才非常简单。
- 计算
A = n (n+1)/2,其中n是序列1…N中的最大数。 - 计算
B为给定序列中所有数字的总和 - 缺少号码等于
A – B
让我们用代码编写解决方案。
public class FindMissingNumber {public static void main(String[] args) {//10 is missingint[] 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 中的 lambda)减少许多行。 让我们看看如何?
import java.util.Arrays;public class FindMissingNumber {public static void main(String[] args) {//10 is missingint[] 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 帖子
