Maison > développement back-end > tutoriel php > XOR au niveau du bit voisin

XOR au niveau du bit voisin

DDD
Libérer: 2025-01-18 00:05:11
original
946 Les gens l'ont consulté
<code class="language-php"><?php
/**
 * @param Integer[] $derived
 * @return Boolean
 */
function doesValidArrayExist($derived) {
    $xorSum = 0;
    foreach ($derived as $num) {
        $xorSum ^= $num;
    }
    return $xorSum === 0;
}

// Example 1
$derived1 = [1, 1, 0];
echo doesValidArrayExist($derived1) ? 'true' : 'false'; // Output: true

// Example 2
$derived2 = [1, 1];
echo doesValidArrayExist($derived2) ? 'true' : 'false'; // Output: true

// Example 3
$derived3 = [1, 0];
echo doesValidArrayExist($derived3) ? 'true' : 'false'; // Output: false
?></code>
Copier après la connexion

Neighboring Bitwise XOR

  1. XOR au niveau du bit voisin

Difficulté :Moyen

Sujets : Tableau, manipulation de bits

Nous recevons un tableau indexé 0 derived de longueur n, créé en calculant le XOR au niveau du bit (⊕) des valeurs adjacentes dans un tableau binaire original (également de longueur n). La règle est la suivante :

  • Si i = n - 1, alors derived[i] = original[i] ⊕ original[0].
  • Sinon, derived[i] = original[i] ⊕ original[i 1].

Notre tâche est de déterminer s'il existe un tableau binaire valide original qui pourrait produire le tableau derived donné. Renvoie true si un tel tableau existe, false sinon. Un tableau binaire ne contient que des 0 et des 1.

Exemple 1 :

  • Entrée : derived = [1,1,0]
  • Sortie : true
  • Explication : Un tableau original valide est [0,1,0].
    • derived[0] = original[0] ⊕ original[1] = 0 ⊕ 1 = 1
    • derived[1] = original[1] ⊕ original[2] = 1 ⊕ 0 = 1
    • derived[2] = original[2] ⊕ original[0] = 0 ⊕ 0 = 0

Exemple 2 :

  • Entrée : derived = [1,1]
  • Sortie : true
  • Explication : Un tableau original valide est [0,1].

Exemple 3 :

  • Entrée : derived = [1,0]
  • Sortie : false
  • Explication : Aucun tableau original valide n'existe.

Contraintes :

  • n == derived.length
  • 1 <= n <= 10^5
  • Les valeurs dans derived sont soit des 0, soit des 1.

Indice : La somme XOR du derived tableau doit être 0.

Solution (PHP) :

L'observation clé est que la somme XOR du tableau derived sera toujours 0 si un tableau original valide existe. En effet, chaque élément de original est impliqué dans exactement deux opérations XOR (sauf dans les cas extrêmes où le premier et le dernier élément sont XOR, mais même dans ce cas, cela s'annule).

<?php
function doesValidArrayExist(array $derived): bool {
    $xorSum = 0;
    foreach ($derived as $val) {
        $xorSum ^= $val;
    }
    return $xorSum === 0;
}

// Test cases
$derived1 = [1, 1, 0];
echo doesValidArrayExist($derived1) ? "true\n" : "false\n"; // true

$derived2 = [1, 1];
echo doesValidArrayExist($derived2) ? "true\n" : "false\n"; // true

$derived3 = [1, 0];
echo doesValidArrayExist($derived3) ? "true\n" : "false\n"; // false

$derived4 = [1,0,1,0,1];
echo doesValidArrayExist($derived4) ? "true\n" : "false\n"; //true

$derived5 = [1,0,1,0,0];
echo doesValidArrayExist($derived5) ? "true\n" : "false\n"; //false

?>

Cette solution a une complexité temporelle de O(n) et une complexité spatiale de O(1). Il détermine efficacement l'existence d'un original tableau valide sans avoir besoin de le reconstruire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal