Maison développement back-end tutoriel php Rechercher si le tableau peut être trié

Rechercher si le tableau peut être trié

Nov 08, 2024 pm 07:34 PM

Find if Array Can Be Sorted

3011. Rechercher si le tableau peut être trié

Difficulté :Moyen

Sujets : Tableau, manipulation de bits, tri

Vous recevez un tableau indexé à 0 de nombres entiers positifs.

En une seule opération, vous pouvez échanger deux éléments adjacents s'ils ont le même nombre de bits définis1. Vous êtes autorisé à effectuer cette opération n'importe quel nombre de fois (y compris zéro).

Renvoyer true si vous pouvez trier le tableau, sinon renvoyer false.

Exemple 1 :

  • Entrée : nums = [8,4,2,30,15]
  • Sortie : vrai
  • Explication : Regardons la représentation binaire de chaque élément. Les nombres 2, 4 et 8 ont chacun un bit défini avec une représentation binaire « 10 », « 100 » et « 1000 » respectivement. Les nombres 15 et 30 ont quatre bits définis chacun avec une représentation binaire « 1111 » et « 11110 ». Nous pouvons trier le tableau en utilisant 4 opérations :
    • Échangez les numéros[0] avec les numéros[1]. Cette opération est valide car 8 et 4 ont chacun un bit défini. Le tableau devient [4,8,2,30,15].
    • Échangez les numéros[1] avec les numéros[2]. Cette opération est valide car 8 et 2 ont chacun un bit défini. Le tableau devient [4,2,8,30,15].
    • Échangez les numéros[0] avec les numéros[1]. Cette opération est valide car 4 et 2 ont chacun un bit défini. Le tableau devient [2,4,8,30,15].
    • Échangez les numéros[3] avec les numéros[4]. Cette opération est valide car 30 et 15 ont chacun quatre bits définis. Le tableau devient [2,4,8,15,30].
    • Le tableau est devenu trié, nous retournons donc vrai.
    • Notez qu'il peut y avoir d'autres séquences d'opérations qui trient également le tableau.

Exemple 2 :

  • Entrée : nums = [1,2,3,4,5]
  • Sortie : vrai
  • Explication : Le tableau est déjà trié, nous renvoyons donc vrai.

Exemple 3 :

  • Entrée : nums = [3,16,8,4,2]
  • Sortie : faux
  • Explication : On peut montrer qu'il n'est pas possible de trier le tableau d'entrée en utilisant un certain nombre d'opérations.

Exemple 4 :

  • Entrée : nums = [75,34,30]
  • Sortie : faux
  • Explication : On peut montrer qu'il n'est pas possible de trier le tableau d'entrée en utilisant un certain nombre d'opérations.

Contraintes :

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 28

Indice :

  1. Divisez le tableau en segments. Chaque segment contient des éléments consécutifs avec le même nombre de bits définis.
  2. De gauche à droite, le plus grand élément du segment précédent doit être plus petit que le plus petit élément du segment actuel.

Solution :

Nous devons déterminer si le tableau peut être trié en échangeant uniquement les éléments adjacents qui ont le même nombre de bits définis dans leur représentation binaire. Voici le plan :

Étapes de la solution :

  1. Observation clé : L'opération nous permet d'échanger des éléments adjacents uniquement s'ils ont le même nombre de bits définis. Cela restreint l'échange entre des éléments avec un nombre différent de bits définis.

  2. Plan :

    • Regroupez les éléments par le nombre de bits définis dans leur représentation binaire.
    • Triez chaque groupe individuellement, car au sein d'un groupe, les éléments peuvent être réorganisés par échanges.
    • Après avoir trié chaque groupe, fusionnez les groupes triés ensemble.
    • Vérifiez si ce tableau fusionné est trié. Si tel est le cas, il est possible de trier le tableau à l'aide des opérations autorisées.
  3. Étapes :

    • Comptez les bits définis dans chaque numéro et regroupez les numéros avec le même nombre de bits définis.
    • Triez chaque groupe individuellement.
    • Reconstruisez le tableau à partir de ces groupes triés et vérifiez si le résultat est trié.

Implémentons cette solution en PHP : 3011. Rechercher si le tableau peut être trié

<?php
/**
 * Helper function to count set bits in a number
 *
 * @param $n
 * @return int
 */
function countSetBits($n) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

/**
 * @param Integer[] $nums
 * @return Boolean
 */
function canSortArray($nums) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Test cases
$nums1 = [8, 4, 2, 30, 15];
$nums2 = [1, 2, 3, 4, 5];
$nums3 = [3, 16, 8, 4, 2];
$nums4 = [75, 34, 30];

echo canBeSorted($nums1) ? 'true' : 'false'; // Expected output: true
echo "\n";
echo canBeSorted($nums2) ? 'true' : 'false'; // Expected output: true
echo "\n";
echo canBeSorted($nums3) ? 'true' : 'false'; // Expected output: false
echo "\n";
echo canBeSorted($nums4) ? 'true' : 'false'; // Expected output: false
?>




Explication:

  1. Fonction countSetBits : compte le nombre de bits définis dans un nombre à l'aide d'opérations au niveau du bit.
  2. Regroupement d'éléments : bitGroups est un tableau associatif où chaque clé représente le nombre de bits défini et chaque valeur est un tableau de nombres avec autant de bits définis.
  3. Tri et Reconstruction :

    • Nous parcourons les nombres pour regrouper les éléments en fonction de leur nombre de bits défini.
    • Nous trions chaque groupe indépendamment.
    • Nous reconstruisons ensuite le tableau en insérant chaque élément du groupe trié dans son ordre d'origine.
    • Enfin, on vérifie si le tableau reconstruit est trié dans un ordre non décroissant. Si c'est le cas, retournez true ; sinon, retournez false.
  4. Comparaison finale : Comparez le tableau reconstruit avec une version entièrement triée de nums. S'ils correspondent, retournez true ; sinon, renvoie false.

Analyse de complexité

  • Complexité temporelle : O(n log n) en raison du tri au sein de chaque groupe et de la comparaison finale.
  • Complexité spatiale : O(n) pour stocker les groupes de bits.

Cette solution garantit que nous échangeons uniquement les éléments adjacents avec le même nombre de bits défini, obtenant un ordre trié si possible.

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

  1. Set Bit Un bit défini fait référence à un bit dans la représentation binaire d'un nombre qui a une valeur de 1. ↩

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 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

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium) 11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium) Mar 03, 2025 am 10:49 AM

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium)

Introduction à l'API Instagram Introduction à l'API Instagram Mar 02, 2025 am 09:32 AM

Introduction à l'API Instagram

Travailler avec les données de session Flash dans Laravel Travailler avec les données de session Flash dans Laravel Mar 12, 2025 pm 05:08 PM

Travailler avec les données de session Flash dans Laravel

Misque de réponse HTTP simplifié dans les tests Laravel Misque de réponse HTTP simplifié dans les tests Laravel Mar 12, 2025 pm 05:09 PM

Misque de réponse HTTP simplifié dans les tests Laravel

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Mar 14, 2025 am 11:42 AM

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST

Construisez une application React avec un Laravel Back End: Partie 2, React Construisez une application React avec un Laravel Back End: Partie 2, React Mar 04, 2025 am 09:33 AM

Construisez une application React avec un Laravel Back End: Partie 2, React

12 meilleurs scripts de chat PHP sur Codecanyon 12 meilleurs scripts de chat PHP sur Codecanyon Mar 13, 2025 pm 12:08 PM

12 meilleurs scripts de chat PHP sur Codecanyon

Notifications à Laravel Notifications à Laravel Mar 04, 2025 am 09:22 AM

Notifications à Laravel

See all articles