当前位置: 面试刷题>> 丢失的数 (经典算法题500道)


题目描述补充

题目:丢失的数

在一个长度为 n 的整数数组 nums 中,所有元素都在范围 [0, n] 内,但其中有一个数丢失了,即数组中缺失了一个数字。请编写一个函数来找到这个丢失的数字。

要求

  • 函数的时间复杂度应为 O(n),其中 n 是数组的长度。
  • 函数的空间复杂度应为 O(1)。

示例

假设数组 nums = [0, 1, 3],其长度为 3,且范围 [0, 3] 内,显然数字 2 丢失了。

PHP 示例代码

function missingNumber($nums) {
    $n = count($nums);
    $expectedSum = $n * ($n + 1) / 2; // 预期总和(等差数列求和)
    $actualSum = array_sum($nums); // 实际总和
    return $expectedSum - $actualSum;
}

// 测试
$nums = [0, 1, 3];
echo missingNumber($nums); // 输出 2

Python 示例代码

def missingNumber(nums):
    n = len(nums)
    expected_sum = n * (n + 1) // 2  # 预期总和(等差数列求和)
    actual_sum = sum(nums)  # 实际总和
    return expected_sum - actual_sum

# 测试
nums = [0, 1, 3]
print(missingNumber(nums))  # 输出 2

JavaScript 示例代码

function missingNumber(nums) {
    const n = nums.length;
    const expectedSum = n * (n + 1) / 2; // 预期总和(等差数列求和)
    const actualSum = nums.reduce((acc, val) => acc + val, 0); // 实际总和
    return expectedSum - actualSum;
}

// 测试
const nums = [0, 1, 3];
console.log(missingNumber(nums)); // 输出 2

码小课提醒:除了使用等差数列求和的方法外,还有其他方法可以解决这个问题,比如使用位运算或哈希表等。但考虑到题目对时间和空间复杂度的要求,上述方法是一个简单且高效的解决方案。在码小课网站上,你可以找到更多关于算法和数据结构的详细解析和练习题,帮助你提升编程能力。

推荐面试题