Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mencari nombor tidak berturut-turut dalam urutan nombor dalam php

Bagaimana untuk mencari nombor tidak berturut-turut dalam urutan nombor dalam php

PHPz
PHPzasal
2023-04-05 10:31:22741semak imbas

Dalam pembangunan PHP, selalunya perlu mencari nombor terputus dalam urutan nombor. Bagaimana untuk merealisasikan keperluan ini dengan cepat dan cekap? Artikel ini akan menerangkannya kepada anda secara terperinci.

1. Latar belakang masalah

Cari nombor terputus dalam urutan nombor, iaitu, cari nombor yang mempunyai selang tertentu dari nombor seterusnya selepas nombor tertentu. Sebagai contoh, diberi urutan [1, 2, 6, 7, 9, 12, 15, 17] dan diminta untuk mencari nombor tak selanjar, dengan mengandaikan selang ialah 4, nilai pulangan ialah [2, 9, 17].

2. Analisis Masalah

Untuk mencapai keperluan ini, kita perlu melintasi keseluruhan urutan nombor dan melakukan pemprosesan berikut untuk setiap nombor:

  1. Semak nombor semasa dan nombor sebelumnya Sama ada perbezaan nombor adalah sama dengan selang yang ditentukan Jika sama, ia menunjukkan bahawa nombor itu adalah salah satu daripada nombor terputus, nombor itu direkodkan sebagai nombor semasa.
  2. Tambahkan nombor yang direkodkan pada tatasusunan hasil, dan akhirnya kembalikan tatasusunan hasil.

Dalam pelaksanaan khusus, kaedah berikut boleh digunakan:

  1. Tentukan tatasusunan $result untuk menyimpan nombor terputus.
  2. Tentukan pembolehubah $previous untuk merekodkan nombor sebelumnya.
  3. Lintas urutan nombor dan proses setiap nombor.

    1. Jika perbezaan antara nombor dan nombor sebelumnya adalah sama dengan selang yang ditentukan, tambahkan nombor itu pada tatasusunan $result; Jika tidak, rekodkan nombor sebagai $previous.
    Mengembalikan tatasusunan $result.
  4. Kod pelaksanaan khusus adalah seperti berikut:

3 Pengoptimuman kod
function findDiscontinuousNumbers($nums, $interval) {
    $result = [];
    $previous = null;
    foreach ($nums as $num) {
        if (!is_null($previous) && $num - $previous == $interval) {
            $result[] = $num;
        }
        $previous = $num;
    }
    return $result;
}

$nums = [1, 2, 6, 7, 9, 12, 15, 17];
$interval = 4;
$result = findDiscontinuousNumbers($nums, $interval);
print_r($result);

Pelaksanaan di atas sudah boleh memenuhi keperluan, tetapi ia mungkin tidak berfungsi. dalam penggunaan sebenar Tidak cekap. Pertimbangkan pengoptimuman berikut:

Apabila nombor telah direkodkan sebagai nombor terputus, nombor berikut tidak boleh berterusan dengannya, jadi $previous boleh ditetapkan kepada nombor tak selanjar ini sebelum pemprosesan seterusnya .
  1. Untuk carian jujukan digital dengan perbezaan yang besar, semasa proses traversal, kedudukan nombor tak selanjar terakhir boleh direkodkan, dan carian seterusnya boleh diproses terus dari kedudukan ini, yang boleh mengurangkan traversal yang tidak perlu.
  2. Kod yang dioptimumkan adalah seperti berikut:

4 Ringkasan
function findDiscontinuousNumbers($nums, $interval) {
    $result = [];
    $previous = null;
    $last_discontinuous_index = null; // 上一次不连续数字的索引位置
    for ($i = 0; $i < count($nums); ) {
        if (!is_null($previous)) {
            if ($nums[$i] - $previous == $interval) {
                $result[] = $nums[$i];
            } else {
                $previous = $nums[$i];
                $last_discontinuous_index = $i;
            }
        } else {
            $previous = $nums[$i];
            $last_discontinuous_index = $i;
        }
        $i += ($i == $last_discontinuous_index + 1) ? 1 : $interval;
    }
    return $result;
}

$nums = [1, 2, 6, 7, 9, 12, 15, 17];
$interval = 4;
$result = findDiscontinuousNumbers($nums, $interval);
print_r($result);

Artikel ini memperkenalkan secara ringkas kaedah mencari nombor terputus dalam PHP dan memberikan asas. pelaksanaan sudah keluar. Dalam penggunaan sebenar, kaedah pelaksanaan yang sesuai dan langkah pengoptimuman harus dipilih mengikut keperluan yang berbeza untuk mencapai prestasi dan kesan yang lebih baik.

Atas ialah kandungan terperinci Bagaimana untuk mencari nombor tidak berturut-turut dalam urutan nombor dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn