php mengecualikan elemen semasa daripada tatasusunan produk

PHPz
Lepaskan: 2023-05-19 17:45:37
asal
389 orang telah melayarinya

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!