Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

PHP หาตัวเลขที่หายไป N ตัวแรกใน Array

ตัวอย่างโค้ด

<?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

คำอธิบาย

  1. Sort Array ก่อน
  2. Skip ค่าที่ ≤ 0 (เนื่องจากหา Natural Numbers เริ่มที่ 1)
  3. Iterate ตั้งแต่ 1 ขึ้นไป เปรียบเทียบกับ Array Elements
  4. ถ้า Array Element ≠ Current Number → Missing → Print และ Count++
  5. ถ้าเท่ากัน → Skip Array Element (i++)
  6. หลังจบ 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]
?>