原文: https://howtodoinjava.com/puzzles/find-missing-number-from-series/

Java 面试上,一个常见的题目是 – 从一系列数字或数组中找到缺失的数字。 这个题目已经在 Amazon 中问过。

在这个 Java 题目中,您有一系列数字开头(例如1…N),而该系列中恰好缺少一个数字。 您必须编写一个 Java 程序来查找系列中的缺失数字。

查找数字的解决方案

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

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

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

  1. public class FindMissingNumber {
  2. public static void main(String[] args) {
  3. //10 is missing
  4. int[] numbers = {1,2,3,4,5,6,7,8,9, 11,12};
  5. int N = 12;
  6. int idealSum = (N * (N + 1)) / 2;
  7. int sum = calculateSum(numbers);
  8. int missingNumber = idealSum - sum;
  9. System.out.println(missingNumber);
  10. }
  11. private static int calculateSum(int[] numbers) {
  12. int sum = 0;
  13. for (int n : numbers) {
  14. sum += n;
  15. }
  16. return sum;
  17. }
  18. }
  19. Output:
  20. 10

查找数字的解决方案 – Java8

上面的代码虽然很简单,但是可以使用新语言功能(例如 Java8 中的 lambda)减少许多行。 让我们看看如何?

  1. import java.util.Arrays;
  2. public class FindMissingNumber {
  3. public static void main(String[] args) {
  4. //10 is missing
  5. int[] numbers = {1,2,3,4,5,6,7,8,9, 11,12};
  6. int N = 12;
  7. int idealSum = (N * (N + 1)) / 2;
  8. int sum = Arrays.stream(numbers).sum();
  9. int missingNumber = idealSum - sum;
  10. System.out.println(missingNumber);
  11. }
  12. }
  13. Output:
  14. 10

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

学习愉快!

参考: SO 帖子