当前位置: 面试刷题>> 丢失的数 (经典算法题500道)
### 题目描述补充
**题目:丢失的数**
在一个长度为 `n` 的整数数组 `nums` 中,所有元素都在范围 `[0, n]` 内,但其中有一个数丢失了,即数组中缺失了一个数字。请编写一个函数来找到这个丢失的数字。
**要求**:
- 函数的时间复杂度应为 O(n),其中 n 是数组的长度。
- 函数的空间复杂度应为 O(1)。
### 示例
假设数组 `nums = [0, 1, 3]`,其长度为 3,且范围 `[0, 3]` 内,显然数字 2 丢失了。
### PHP 示例代码
```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 示例代码
```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 示例代码
```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
```
**码小课提醒**:除了使用等差数列求和的方法外,还有其他方法可以解决这个问题,比如使用位运算或哈希表等。但考虑到题目对时间和空间复杂度的要求,上述方法是一个简单且高效的解决方案。在码小课网站上,你可以找到更多关于算法和数据结构的详细解析和练习题,帮助你提升编程能力。