Rumah >pembangunan bahagian belakang >tutorial php >Bitwise XOR bagi Semua Gandingan
<code class="language-php"><?php function xorAllPairings($nums1, $nums2) { $m = count($nums1); $n = count($nums2); $result = 0; for ($i = 0; $i < 32; $i++) { $count1 = 0; $count2 = 0; foreach ($nums1 as $num) { if (($num >> $i) & 1) { $count1++; } } foreach ($nums2 as $num) { if (($num >> $i) & 1) { $count2++; } } $totalCount = $count1 * $n + $count2 * $m; if ($totalCount % 2 != 0) { $result |= (1 << $i); } } return $result; } // Example 1 $nums1 = [2, 1, 3]; $nums2 = [10, 2, 5, 0]; echo xorAllPairings($nums1, $nums2); // Output: 13 // Example 2 $nums1 = [1, 2]; $nums2 = [3, 4]; echo xorAllPairings($nums1, $nums2); // Output: 0 ?></code>
Kesukaran: Sederhana
Topik: Tatasusunan, Manipulasi Bit
Diberikan dua tatasusunan terindeks 0, nums1
dan nums2
, yang mengandungi integer bukan negatif. Tatasusunan nums3
mengandungi XOR bitwise semua gandingan antara nums1
dan nums2
(setiap integer dalam nums1
digandingkan dengan setiap integer dalam nums2
tepat sekali). Kembalikan XOR bitwise semua integer dalam nums3
.
Contoh 1:
nums1
= [2,1,3], nums2
= [10,2,5,0]nums3
yang mungkin ialah [8,0,7,2,11,3,4,1,9,1,6,3]. XOR bitwise semua nombor ini ialah 13.Contoh 2:
nums1
= [1,2], nums2
= [3,4]nums3
ialah [2,5,1,6]. 2 ^ 5 ^ 1 ^ 6 = 0.Kekangan:
nums1.length
, nums2.length
≤ 105
nums1[i]
, nums2[i]
≤ 109
Petunjuk: Pertimbangkan cara kiraan setiap integer individu mempengaruhi jawapan akhir. Jika nums1
mempunyai panjang m
dan nums2
mempunyai panjang n
, setiap nombor dalam nums1
diulang n
kali dan setiap nombor dalam nums2
diulang m
kali dalam jumlah XOR.
Penyelesaian:
Pemerhatian utama ialah operasi XOR adalah bersekutu dan komutatif. Juga, x ^ x == 0
. Oleh itu, jika suatu nombor muncul beberapa kali genap dalam jumlah XOR, ia membatalkan dirinya sendiri. Kita hanya perlu mempertimbangkan nombor yang muncul beberapa kali ganjil.
Setiap nombor dalam nums1
muncul n
kali dalam jumlah XOR, dan setiap nombor dalam nums2
muncul m
kali. Kita boleh melelar melalui bit setiap nombor dan mengira jumlah bilangan kali setiap bit ditetapkan. Jika jumlah kiraan sedikit adalah ganjil, ia menyumbang kepada keputusan XOR akhir.
Kod PHP yang disediakan melaksanakan pendekatan ini dengan cekap. Kerumitan masa ialah O(m n) kerana kita berulang melalui nums1
dan nums2
sekali. Kerumitan ruang ialah O(1) kerana kami menggunakan jumlah ruang tambahan yang tetap.
Atas ialah kandungan terperinci Bitwise XOR bagi Semua Gandingan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!