ตัวอย่างโค้ด
<?php
function missing_values($my_arr, $len, $n) {
sort($my_arr);
$i = 0;
while ($i < $n && $my_arr[$i] <= 0) $i++;
$count = 0;
$curr = 1;
while ($count < $n && $i < $len) {
if ($my_arr[$i] != $curr) {
echo $curr . " ";
$count++;
} else {
$i++;
}
$curr++;
}
while ($count < $n) {
echo $curr . " ";
$curr++;
$count++;
}
}
$my_arr = [6, 8, 0];
$len = sizeof($my_arr);
$n = 5;
echo "The missing values of the array are ";
missing_values($my_arr, $len, $n);
?>
ผลลัพธ์
The missing values of the array are 1 2 3 4 5
คำอธิบาย
- Sort Array ก่อน
- Skip ค่าที่ ≤ 0 (เนื่องจากหา Natural Numbers เริ่มที่ 1)
- Iterate ตั้งแต่ 1 ขึ้นไป เปรียบเทียบกับ Array Elements
- ถ้า Array Element ≠ Current Number → Missing → Print และ Count++
- ถ้าเท่ากัน → Skip Array Element (i++)
- หลังจบ Array ถ้ายังหาไม่ครบ $n ตัว → Print ต่อไปเรื่อยๆ
หมายเหตุ
โค้ดต้นฉบับมี sort($my_arr, $len) ซึ่งผิด (sort() ไม่รับ Parameter ที่ 2) 已แก้ไขในตัวอย่างข้างต้น
วิธี Alternative (ใช้ Array Functions)
<?php
function findMissing($arr, $n) {
$arr = array_filter($arr, fn($x) => $x > 0);
$arr = array_unique($arr);
sort($arr);
$missing = [];
$expected = 1;
foreach ($arr as $val) {
while ($expected < $val && count($missing) < $n) {
$missing[] = $expected++;
}
if ($expected == $val) $expected++;
}
while (count($missing) < $n) {
$missing[] = $expected++;
}
return $missing;
}
print_r(findMissing([6, 8, 0], 5)); // [1, 2, 3, 4, 5]
?>