返回
PHP Leetcode题解--D79 448. Find All Numbers Disappeared in an Array:揭开缺失数字的奥秘
见解分享
2024-01-08 14:24:37
算法剖析
1. 遍历法
1.1 原理介绍
遍历法是一种简单而直接的方法,它通过循环遍历数组中的每个元素,并将其标记为已访问。然后,再进行第二次遍历,查找未被标记的元素,这些元素就是缺失的数字。
1.2 代码实现
<?php
function findDisappearedNumbers($nums) {
$n = count($nums);
$visited = array_fill(0, $n, false);
foreach ($nums as $num) {
$visited[$num - 1] = true;
}
$result = array();
for ($i = 0; $i < $n; $i++) {
if (!$visited[$i]) {
$result[] = $i + 1;
}
}
return $result;
}
?>
2. 散列表法
2.1 原理介绍
散列表法是一种更有效的方法,它使用一个散列表来存储数组中的元素。当遍历数组时,将每个元素作为散列表的键,并将该元素的值设置为1。然后,再遍历散列表,查找键为1的元素,这些元素就是缺失的数字。
2.2 代码实现
<?php
function findDisappearedNumbers($nums) {
$hashtable = array();
foreach ($nums as $num) {
$hashtable[$num] = 1;
}
$n = count($nums);
$result = array();
for ($i = 1; $i <= $n; $i++) {
if (!isset($hashtable[$i])) {
$result[] = $i;
}
}
return $result;
}
?>
3. 排序法
3.1 原理介绍
排序法是一种更为简洁的方法,它先对数组进行排序,然后遍历数组,查找相邻元素之间的缺失数字。
3.2 代码实现
<?php
function findDisappearedNumbers($nums) {
sort($nums);
$n = count($nums);
$result = array();
for ($i = 1; $i <= $n; $i++) {
if ($i != $nums[$i - 1]) {
$result[] = $i;
}
}
return $result;
}
?>
4. 计数法
4.1 原理介绍
计数法是一种更为高效的方法,它利用数组中元素的范围来进行计数。首先,创建一个大小为n的数组,并将其全部元素初始化为0。然后,遍历原数组,将每个元素作为计数数组的索引,并将其值加1。最后,遍历计数数组,查找值为0的索引,这些索引就是缺失的数字。
4.2 代码实现
<?php
function findDisappearedNumbers($nums) {
$n = count($nums);
$count = array_fill(0, $n, 0);
foreach ($nums as $num) {
$count[$num - 1]++;
}
$result = array();
for ($i = 0; $i < $n; $i++) {
if ($count[$i] == 0) {
$result[] = $i + 1;
}
}
return $result;
}
?>
结语
在本文中,我们详细介绍了四种查找数组中缺失数字的方法,包括遍历法、散列表法、排序法和计数法。每种方法都有其独特的优缺点,您可以根据具体情况选择最适合您的方法。希望这些方法能够帮助您解决实际问题,并提升您的编程技能。