recherche
Maisondéveloppement back-endtutoriel phpRetournements de bits minimum pour convertir le nombre

Minimum Bit Flips to Convert Number

2220. Retournements de bits minimum pour convertir le nombre

Difficulté :Facile

Sujets : Manipulation des bits

Un retournement de bits d'un nombre x consiste à choisir un bit dans la représentation binaire de x et à le retourner de 0 à 1 ou de 1 à 0.

  • Par exemple, forx = 7, la représentation binaire est 111 et nous pouvons choisir n'importe quel bit (y compris les zéros non affichés) et l'inverser. Nous pouvons retourner le premier bit à droite pour obtenir 110, retourner le deuxième bit à droite pour obtenir 101, retourner le cinquième bit à droite (un zéro non significatif) pour obtenir 10111, etc.

Étant donné deux entiers début et objectif, renvoie le minimum nombre de retournements de bits pour convertir le début en objectif.

Exemple 1 :

  • Entrée : début = 10, objectif = 7
  • Sortie : 3
  • Explication : Les représentations binaires de 10 et 7 sont respectivement 1010 et 0111. Nous pouvons convertir 10 en 7 en 3 étapes :
    • Retournez le premier bit en partant de la droite : 1010 -> 1011.
    • Retournez le troisième bit en partant de la droite : 1011 -> 1111.
    • Inversez le quatrième bit en partant de la droite : 1111 -> 0111.
    • On peut montrer que nous ne pouvons pas convertir 10 en 7 en moins de 3 étapes. Par conséquent, nous revenons 3.

Exemple 2 :

  • Entrée : début = 3, objectif = 4
  • Sortie : 3
  • Explication : Les représentations binaires de 3 et 4 sont respectivement 011 et 100. Nous pouvons convertir 3 en 4 en 3 étapes :
    • Retournez le premier bit en partant de la droite : 011 -> 010.
    • Retournez le deuxième bit en partant de la droite : 010 -> 000.
    • Retournez le troisième bit en partant de la droite : 000 -> 100.
    • On peut montrer que nous ne pouvons pas convertir 3 en 4 en moins de 3 étapes. Par conséquent, nous revenons 3.

Contraintes :

  • 0 9

Indice :

  1. Si la valeur d'un bit au début et dans l'objectif diffère, alors nous devons inverser ce bit.
  2. Envisagez d'utiliser l'opération XOR pour déterminer quels bits nécessitent un peu d'inversion.

Solution :

Nous devons déterminer combien de positions de bits diffèrent entre le début et l'objectif. Ceci peut être facilement réalisé en utilisant l'opération XOR (^), qui renvoie un 1 pour chaque position de bit où les deux nombres diffèrent.

Mesures:

  1. Effectuez l'opération XOR entre le début et l'objectif. Le résultat sera un nombre comportant des 1 dans toutes les positions où le départ et l'objectif diffèrent.
  2. Comptez combien de 1 sont présents dans la représentation binaire du résultat (c'est-à-dire la distance de Hamming).
  3. Le nombre de 1 nous donnera le nombre minimum de retournements de bits nécessaires.

Implémentons cette solution en PHP : 2220. Retournements de bits minimum pour convertir le nombre

<?php /**
 * @param Integer $start
 * @param Integer $goal
 * @return Integer
 */
function minBitFlips($start, $goal) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Test cases
echo minBitFlips(10, 7);  // Output: 3
echo "\n";
echo minBitFlips(3, 4);   // Output: 3
?>

Explication:

  1. L'opération ^ (XOR) compare chaque bit de début et d'objectif. Si les bits sont différents, le bit correspondant dans le résultat sera 1.
  2. Nous comptons ensuite le nombre de 1 dans le résultat, ce qui donne le nombre de bits différents, c'est-à-dire le nombre de retournements de bits requis.
  3. L'opération & 1 vérifie si le dernier bit est 1, et >>= 1 décale le nombre vers la droite pour traiter le bit suivant.

Complexité temporelle :

  • La complexité temporelle est (O(log N)), où (N) est le plus grand du début ou de l'objectif, car nous vérifions chaque bit du nombre. Dans le pire des cas, nous parcourrons tous les bits d'un entier de 32 bits (puisque PHP 5.6 fonctionne avec des entiers de 32 bits ou de 64 bits selon le système).

Sortir:

  • Pour début = 10 et objectif = 7, le résultat est 3.
  • Pour début = 3 et objectif = 4, le résultat est 3.

Liens de contact

Si vous avez trouvé cette série utile, pensez à donner une étoile au référentiel sur GitHub ou à partager la publication sur vos réseaux sociaux préférés ?. Votre soutien signifierait beaucoup pour moi !

Si vous souhaitez du contenu plus utile comme celui-ci, n'hésitez pas à me suivre :

  • LinkedIn
  • GitHub

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!

Déclaration
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
NGINX WordPress FPM: résoudre l'image de stockage EFS 404 ProblèmeNGINX WordPress FPM: résoudre l'image de stockage EFS 404 ProblèmeAug 21, 2025 am 10:18 AM

Cet article fournit une solution au problème que Nginx et WordPress FPM partagent des pods dans l'environnement Kubernetes, et les images sont stockées dans EFS et symbolisées à WP-Content / Téléchargements. Le noyau est de s'assurer que les conteneurs Nginx peuvent accéder au stockage EFS et à éviter les problèmes de droits d'accès aux fichiers causés par des liens symboliques. En configurant correctement le point de montage des conteneurs, nous nous assurons que les deux conteneurs peuvent accéder aux EF, résolvant ainsi le problème de la défaillance de l'image.

Comparez les philosophies de base derrière Laravel et Symfony.Comparez les philosophies de base derrière Laravel et Symfony.Aug 21, 2025 am 09:54 AM

LaravelprioritiseDeveloperChappnessandRapidDevelopmentwithafull-Ferée, intégrée, whilleymfonyEmphasizesreusability andflexibility throughtouledCouled, standaloncomponents.2.laravelfollowsconvention overconduguration, minimixingsepandacceleratin

Comment déboguer le code dans PHPComment déboguer le code dans PHPAug 21, 2025 am 09:31 AM

ActiverrorReporttingIndevelopmentUsingingError_Reportting (e_all) andini_set ('display_errors', 1) tocatchwarnings, notices etfatalerrrors.usevar_dump () etprint_r () avec un objet

`isset ()` contre `array_key_exists ()`: une plongée profonde dans la validation clé`isset ()` contre `array_key_exists ()`: une plongée profonde dans la validation cléAug 21, 2025 am 09:21 AM

La principale différence entre Isset () et Array_Key_Exists () est le traitement des valeurs nuls: 1. Isset ($ array ['key']) renvoie false lorsque la clé n'existe pas ou que la valeur est nul; 2. Array_key_exists ('clé', $ array) renvoie true tant que la clé existe, même si la valeur est nul; 3. Isset () a des performances plus élevées et est une structure linguistique, tandis que Array_key_Exists () est un appel de fonction; 4. Lorsque vous vérifiez les tableaux imbriqués, vous devez d'abord vous assurer que la clé parent existe pour éviter les avertissements; 5. Utiliser isset () est adapté pour vérifier les valeurs non nulles et les entrées utilisateur, et utilisez array_key_ex

Comment travailler avec des expressions régulières en phpComment travailler avec des expressions régulières en phpAug 21, 2025 am 09:13 AM

Utilisez la fonction PREG de PCRE pour effectuer des opérations régulières: preg_match () vérifie le match, preg_match_all () trouve toutes les correspondances, preg_replace () remplace le contenu de la correspondance, preg_split () divise la chaîne par motif et nécessite des séparateurs pour enfermer le motif et ajouter des modificateurs tels que I (Ignor Uppercase et uppercase).

Débogage des applications PHP dans les machines virtuelles NAT à l'aide de xdebugDébogage des applications PHP dans les machines virtuelles NAT à l'aide de xdebugAug 21, 2025 am 08:42 AM

Cet article vise à résoudre les problèmes de connexion rencontrés lors du débogage des applications PHP via XDebug dans des machines virtuelles à l'aide du mode NAT Network. L'article introduira la configuration de XDebug et les paramètres du débogueur de code VS en détail, et fournira des étapes pour dépanner les erreurs de connexion pour aider les développeurs à effectuer un débogage à distance en douceur.

Exigences de format de sortie: tutoriel sur le calcul du nombre de chevauchements des événements sur les colonnes de calendrierExigences de format de sortie: tutoriel sur le calcul du nombre de chevauchements des événements sur les colonnes de calendrierAug 21, 2025 am 08:09 AM

Cet article décrit une méthode pour calculer le nombre de chevauchements d'événements sur une colonne de calendrier. En déterminant si l'heure de début et l'heure de fin de l'événement se trouvent dans la plage de temps d'autres événements, il peut être déterminé s'il y a un chevauchement entre les événements. Cet article expliquera en détail la logique de jugement qui se chevauchera et fournira un exemple de code pour aider les développeurs à implémenter facilement le calcul du chevauchement des événements.

Guide de configuration pour le débogage avec des machines virtuelles NAT avec xdebugGuide de configuration pour le débogage avec des machines virtuelles NAT avec xdebugAug 21, 2025 am 07:30 AM

Ce document est destiné à aider les développeurs à configurer XDebug pour déboguer via la traduction d'adresses réseau (NAT) en applications PHP sur les machines virtuelles (VM). Nous fournirons des instructions détaillées sur la façon de configurer XDebug, des réseaux de machines virtuelles et des IDE tels que le code vs pour résoudre les problèmes de connectivité courants et fournir des suggestions de pratiques pour garantir que le processus de débogage se déroule bien.

See all articles

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

Sujets chauds