完整题目描述
给定一个长度为 n
的整数数组 nums
,其中 nums
的取值范围在闭区间 [1, n]
内(即数组中的每个数字都是 1
到 n
之间的一个整数),且数组中每个数字最多出现一次。请编写一个算法来找出数组中所有未出现的数字。
要求:
- 算法的时间复杂度应为 O(n)。
- 算法的空间复杂度应尽可能低,最好为 O(1)(不考虑输出数组)。
示例
输入:nums = [4, 3, 2, 7, 8, 2, 3, 1]
输出:[5, 6]
解释:数组 nums
包含了从 1 到 8 的整数,但其中缺少了 5 和 6。
PHP 示例代码
function findDisappearedNumbers($nums) {
$n = count($nums);
$result = [];
// 标记出现的数字
foreach ($nums as $num) {
$index = abs($num) - 1;
if ($nums[$index] > 0) {
$nums[$index] *= -1;
}
}
// 找出未标记(即未出现)的数字
for ($i = 0; $i < $n; $i++) {
if ($nums[$i] > 0) {
$result[] = $i + 1;
}
}
return $result;
}
// 测试
$nums = [4, 3, 2, 7, 8, 2, 3, 1];
$result = findDisappearedNumbers($nums);
print_r($result);
Python 示例代码
def findDisappearedNumbers(nums):
n = len(nums)
result = []
# 标记出现的数字
for num in nums:
index = abs(num) - 1
if nums[index] > 0:
nums[index] *= -1
# 找出未标记(即未出现)的数字
for i in range(n):
if nums[i] > 0:
result.append(i + 1)
return result
# 测试
nums = [4, 3, 2, 7, 8, 2, 3, 1]
result = findDisappearedNumbers(nums)
print(result)
JavaScript 示例代码
function findDisappearedNumbers(nums) {
const n = nums.length;
const result = [];
// 标记出现的数字
for (let num of nums) {
const index = Math.abs(num) - 1;
if (nums[index] > 0) {
nums[index] *= -1;
}
}
// 找出未标记(即未出现)的数字
for (let i = 0; i < n; i++) {
if (nums[i] > 0) {
result.push(i + 1);
}
}
return result;
}
// 测试
const nums = [4, 3, 2, 7, 8, 2, 3, 1];
const result = findDisappearedNumbers(nums);
console.log(result);
码小课网站中有更多相关内容分享给大家学习,涵盖各种编程语言的基础和进阶知识,以及实用的算法和数据结构讲解。