原文: 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 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 中的 lambda)减少许多行。 让我们看看如何?
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 帖子