Rumah  >  Artikel  >  pembangunan bahagian belakang  >  php mengecualikan elemen semasa daripada tatasusunan produk

php mengecualikan elemen semasa daripada tatasusunan produk

PHPz
PHPzasal
2023-05-19 17:45:37434semak imbas

PHP ialah bahasa skrip yang digunakan secara meluas yang biasa digunakan dalam bidang pembangunan web. Dalam PHP, kita sering menghadapi situasi di mana tatasusunan perlu diproses. Sebagai contoh, diberikan tatasusunan, ia diperlukan untuk mengira hasil darab unsur yang tinggal selepas mengalih keluar unsur semasa. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan tatasusunan produk selepas mengalih keluar elemen semasa.

1. Idea asal:

Kita boleh menggunakan dua gelung untuk mencapai keperluan ini:

  • Gelung luar merentasi setiap elemen
  • Bahagian dalam gelung mengira hasil bagi elemen selain daripada elemen semasa yang dilalui

Walau bagaimanapun, kerumitan masa kaedah ini ialah O(n^2) Apabila terdapat terlalu banyak elemen tatasusunan, masa pelaksanaan program akan meningkat dengan ketara. Oleh itu, kita perlu mengubah pemikiran kita untuk meningkatkan kecekapan algoritma.

2. Idea Pengoptimuman:

Kami mula-mula boleh mengira hasil darab keseluruhan tatasusunan, dan kemudian membahagikan hasil darab keseluruhan tatasusunan dengan elemen semasa berdasarkan elemen semasa untuk mendapatkan produk selepas mengeluarkan elemen semasa.

Walau bagaimanapun, kaedah ini akan menyebabkan masalah apabila elemen semasa ialah 0, kerana pembahagian dengan 0 tidak bermakna. Oleh itu, kita perlu mengendalikan kes di mana elemen semasa ialah 0.

3. Kod lengkap:

Kod PHP lengkap diberikan di bawah:

function productExceptSelf($nums) {
    $length = count($nums);
    if ($length == 0) {
        return array();
    } elseif ($length == 1) {
        return array(0);
    }

    $prod = 1;
    $zeroCount = 0;
    for ($i = 0; $i < $length; $i++) {
        if ($nums[$i] == 0) {
            $zeroCount++;
            if ($zeroCount > 1) {
                return array_fill(0, $length, 0);
            }
            continue;
        }
        $prod *= $nums[$i];
    }

    $res = array();
    for ($i = 0; $i < $length; $i++) {
        if ($zeroCount == 1 && $nums[$i] != 0) {
            $res[] = 0;
            continue;
        }
        if ($zeroCount > 1) {
            $res[] = 0;
            continue;
        }
        $res[] = $nums[$i] == 0 ? $prod : $prod / $nums[$i];
    }
    return $res;
}

4 Analisis kod:

Kod di atas menggunakan idea berikut : Mula-mula, imbas keseluruhan tatasusunan dan kira hasil darab unsur bukan sifar dalam tatasusunan. Pada masa yang sama, rekodkan bilangan 0s dalam tatasusunan. Kedua, keseluruhan tatasusunan diimbas, dan untuk setiap elemen, hasil akhir dikira berdasarkan jumlah produk di atas dan bilangan 0s.

Antaranya, pemprosesan khas diterima pakai apabila elemen semasa ialah 0. Jika bilangan 0s dalam tatasusunan lebih besar daripada 1, tatasusunan di mana semua elemen adalah 0 akan dikembalikan secara langsung, jika tidak, hasil darab unsur semasa ialah 0.

5. Kes ujian:

Berikut ialah beberapa set data ujian:

$nums = [1, 2, 3, 4];
gema meletup (" ,", productExceptSelf($nums)); // Output "24,12,8,6"

$nums = [0, 2, 3, 4];
echo implode(" ," , productExceptSelf($nums)); // Output "24,0,0,0"

$nums = [1, 0, 3, 4];
echo implode("," , productExceptSelf ($nums)); // Output "0,12,0,0"

$nums = [1, 0, 3, 0];
echo implode(",", productExceptSelf ($ nums)); // Output "0,0,0,0"

6. Ringkasan:

Artikel ini memperkenalkan cara menggunakan PHP untuk melaksanakan tatasusunan produk selepas mengalih keluar arus. unsur. Melalui algoritma pengoptimuman, kerumitan masa program dapat dikurangkan dengan berkesan dan kecekapan pelaksanaan program dapat dipertingkatkan. Dalam pembangunan sebenar, kita harus memilih algoritma optimum untuk memproses tatasusunan mengikut situasi tertentu.

Atas ialah kandungan terperinci php mengecualikan elemen semasa daripada tatasusunan produk. 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