C#:利用数组长度查找未排序整数数组中的缺失元素
找出未排序整数数组中的缺失元素
给定未排序整数数组:
int[] array = new int[] { 3, 4, 5, 7, 8, 2, 1 };
已知数组元素最小值为1,最大值为8,需找出其中缺失的元素(预期结果为6)。
核心解法:利用等差数列求和公式
因为从最小值到最大值是连续的整数序列,我们可以通过完整序列总和与当前数组元素总和的差值,直接得到缺失元素。具体步骤:
- 计算1到8这个完整连续序列的总和:使用等差数列求和公式
(首项 + 末项) * 项数 / 2,这里项数是max - min + 1 = 8,所以总和为(1 + 8) * 8 / 2 = 36。 - 计算当前数组所有元素的总和:
3 + 4 + 5 + 7 + 8 + 2 + 1 = 30。 - 缺失元素 = 完整序列总和 - 数组元素总和 =
36 - 30 = 6。
代码实现(Java)
public class FindMissingElement { public static void main(String[] args) { int[] array = {3, 4, 5, 7, 8, 2, 1}; int min = 1; int max = 8; int fullSequenceSum = (min + max) * (max - min + 1) / 2; int arraySum = 0; for (int num : array) { arraySum += num; } int missingNumber = fullSequenceSum - arraySum; System.out.println("缺失元素:" + missingNumber); // 输出6 } }
关于“仅通过数组长度”的说明
当前数组长度为7,而完整连续序列的长度应为 max - min + 1 = 8,两者差值为1,说明数组恰好缺失1个元素,这也验证了使用总和差方法的合理性——当仅缺失一个元素时,该方法高效且准确。
内容的提问来源于stack exchange,提问作者Shameel KT
相关产品推荐
相关产品推荐

