Rumah >pembangunan bahagian belakang >tutorial php >Kurangkan XOR
2429. Minimumkan XOR
Kesukaran: Sederhana
Topik: Tamak, Manipulasi Bit
Masalah ini mencabar anda untuk mencari integer positif, x, yang memenuhi dua syarat: ia mempunyai bilangan bit set yang sama (1s dalam perwakilan binarinya) seperti integer yang diberikan, num2
, dan XOR bitwise dengan integer lain yang diberikan, num1
, diminimumkan.
Contoh 1:
num1
= 3, num2
= 5Contoh 2:
num1
= 1, num2
= 12Kekangan:
num1
, num2
≤ 109
Pendekatan Penyelesaian:
Kuncinya ialah strategi tamak. Untuk meminimumkan hasil XOR, kami ingin menjajarkan bit set x dengan bit set num1
sebanyak mungkin.
Kira Set Bit: Tentukan bilangan set bit dalam num2
. Mari kita panggil ini targetBits
.
Bina x: Mulakan x kepada 0. Lelaran melalui bit num1
, bermula daripada bit yang paling ketara. Untuk setiap bit set dalam num1
, jika kita belum mencapai targetBits
lagi, tambah bit itu pada x. Jika kita sudah memenuhi syarat targetBits
, langkau sedikit. Jika kita belum mencapai targetBits
selepas memproses semua bit num1
, tambah bit yang tinggal pada x, bermula dari bit yang paling tidak ketara.
Pulangan x: x yang dibina akan memenuhi syarat.
Pelaksanaan PHP:
<code class="language-php"><?php function minimizeXor(int $num1, int $num2): int { $targetBits = countSetBits($num2); $x = 0; $bitsSet = 0; for ($i = 30; $i >= 0; $i--) { if (($num1 >> $i) & 1) { // Check if the i-th bit of num1 is set if ($bitsSet < $targetBits) { $x |= (1 << $i); // Set the i-th bit of x $bitsSet++; } } } // If we haven't reached targetBits, add remaining bits from LSB for ($i = 0; $i < 31 && $bitsSet < $targetBits; $i++) { if (!($x & (1 << $i))) { //check if bit is not set yet $x |= (1 << $i); $bitsSet++; } } return $x; } function countSetBits(int $n): int { $count = 0; while ($n > 0) { $count += $n & 1; $n >>= 1; } return $count; } // Test cases echo minimizeXor(3, 5) . PHP_EOL; // Output: 3 echo minimizeXor(1, 12) . PHP_EOL; // Output: 3 echo minimizeXor(10, 7) . PHP_EOL; //Output: 11 ?></code>
Kerumitan Masa dan Ruang:
num1
dan num2
. Ini kerana kami mengulangi bit nombor.Penyelesaian yang dipertingkatkan ini menyediakan cara yang lebih jelas, cekap dan teguh untuk menyelesaikan masalah. Komen menerangkan logik pada setiap langkah.
Atas ialah kandungan terperinci Kurangkan XOR. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!