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

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

原文: 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

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

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 帖子