Table des matières
Grammaire
Algorithme
Méthode
Méthode 1 : Approche basée sur les ensembles
Exemple
Sortie
Instructions
Méthode 2 : Méthode de tri
Conclusion
Maison développement back-end C++ Vérifie si le tableau donné peut former une permutation de 1 à N en divisant par deux les éléments

Vérifie si le tableau donné peut former une permutation de 1 à N en divisant par deux les éléments

Sep 10, 2023 pm 12:05 PM
Tableau vérifier la permutation divisée par deux

Vérifie si le tableau donné peut former une permutation de 1 à N en divisant par deux les éléments

Notre objectif est de déterminer si l'exécution de plusieurs divisions sur chaque élément contenu dans le tableau crée une liste d'entiers de 1 à N sans aucun doublon. Le succès de cet effort signifiera que nos objectifs d’enquête auront été atteints avec succès. Essentiellement, déterminer si couper par deux tous les éléments fournis dans un tableau donné entraînerait une permutation composée entièrement de valeurs non répétitives entre 1 et N est l'objectif principal de notre travail. Une fois confirmé, l’évaluation de notre article serait la prochaine étape logique.

Grammaire

Avant d'aborder la solution proposée, il est important d'avoir une compréhension approximative de la syntaxe de la méthode que nous sommes sur le point d'implémenter.

bool canBePermutation(vector<int>& arr)
{
   // Implementation goes here
}
</int>

Algorithme

Pour résoudre ce problème, procédons étape par étape en utilisant l'algorithme décrit ci-dessous -

  • Pour porter une attention particulière aux composants observés dans un tableau, commencez par démarrer une collection ou un ensemble de hachage. Ensuite, parcourez chaque élément présent dans ce tableau.

  • Pour obtenir un entier compris entre 1 et N, vous devez diviser chaque élément par 2 plusieurs fois.

  • Vérifiez si la valeur du résultat existe déjà dans la collection. Si c'est le cas, renvoie false car il ne peut pas y avoir de doublons dans l'arrangement.

  • Pour que le tableau soit un arrangement valide, chaque élément doit remplir les conditions ci-dessus. En supposant que ce critère soit pleinement rempli, confirmer son éligibilité en fournissant une véritable valeur de retour peut être considéré comme une ligne de conduite appropriée.

Méthode

Pour résoudre efficacement ce problème. Il peut être utile d’explorer différentes stratégies. Je vais suggérer deux approches possibles -

Méthode 1 : Approche basée sur les ensembles

Créer une approche efficace nécessite l'utilisation de techniques minutieuses, comme la mise en place d'un système de suivi utilisant des collections créées pour enregistrer les composants rencontrés tout au long du processus. Cela implique d'évaluer de manière itérative chaque composant via un processus de division, en s'assurant que sa valeur résultante se situe entre 1 et N valeurs de plage, puis en vérifiant notre ensemble de traces pour validation avant d'ajouter l'élément nouvellement observé, puis en retournant s'il y a des anomalies fausses, sinon renvoie true une fois que toutes les valeurs ont réussi les contrôles d'évaluation requis par Constellation.

Exemple

#include <iostream>
#include <vector>
#include <unordered_set>

bool canBePermutation(std::vector<int>& arr) {
   std::unordered_set<int> seen;
   
   for (int num : arr) {
      while (num > 0 && num != 1) {
         if (seen.find(num) != seen.end())
            return false;
         
         seen.insert(num);
         num /= 2;
      }
      
      if (num == 0)
         return false;
   }
   
   return true;
}

int main() {
   std::vector<int> arr = {4, 2, 1, 3};
   
   if (canBePermutation(arr)) {
      std::cout << "The given array can be transformed into a permutation.";
   } else {
      std::cout << "The given array cannot be transformed into a permutation.";
   }
   
   return 0;
}

Sortie

The given array cannot be transformed into a permutation.

Instructions

Les premières étapes de la méthode 1 consistent à configurer un ensemble non ordonné pour garder une trace des éléments présents dans le tableau. Cette méthode de codage continue ensuite à parcourir chaque élément du même tableau, en les divisant par 2 à chaque fois, en les réduisant de manière répétée à un nombre entier compris entre 1 et N. Au cours de ces itérations, une vérification est effectuée pour voir si un élément qui semble avoir été créé a déjà été créé dans la même collection, essayant ainsi d'éviter les permutations en double simplement dues à la duplication. Lorsqu'un doublon résultant de ces permutations répétitives est détecté, false est renvoyé, comme lorsque tout est vérifié sans qu'un doublon soit complété - passé comme vrai - indiquant effectivement si l'ensemble donné peut être déplacé dans sa permutation respective, tout en minimisant ses composants en les divisant par deux. eux.

Méthode 2 : Méthode de tri

Le tri croissant permet de détecter si chaque élément du tableau peut s'afficher comme une valeur correspondante dans la liste triée. Si aucun des éléments ne répond à ce critère, notre sortie produira faux ; cependant, si tous les éléments réussissent ce test, elle renverra vrai.

Exemple

#include <iostream>
#include <vector>
#include <algorithm>

bool canBePermutation(std::vector<int>& arr) {
   std::sort(arr.begin(), arr.end());

   for (int i = 0; i < arr.size(); i++) {
      int expected = i + 1;
      while (arr[i] > 0 && arr[i] != expected)
         arr[i] /= 2;

      if (arr[i] != expected)
         return false;
   }
   
   return true;
}

int main() {
   std::vector<int> arr = {4, 2, 1, 3};
   
   if (canBePermutation(arr)) {
      std::cout << "The given array can be transformed into a permutation.";
   } else {
      std::cout << "The given array cannot be transformed into a permutation.";
   }
   
   return 0;
}

Sortie

The given array can be transformed into a permutation.

Instructions

Selon la méthode 2 (méthode de tri), nous trions d'abord le tableau d'entrée d'origine par ordre croissant avant de vérifier davantage la routine de code. Le code exécute ensuite diverses itérations sur chaque élément individuel du tableau ci-dessus tout en vérifiant s'ils sont divisibles par deux jusqu'à ce qu'ils atteignent une valeur spécifiée et supposée établie en fonction de leur position dans la plage de valeurs d'index nouvellement triée. S'il y a des cas dans une telle itération qui ne remplissent pas ces conditions clés prédéfinies, alors notre code décrit le résultat comme « Faux », ce qui signifie qu'il n'est pas possible de convertir ce tableau dans l'arrangement séquentiel correspondant. Dans le même temps, à l’inverse, chaque élément conforme produit un « vrai » résultat, fournissant une direction positive réalisable pour nos objectifs de réorganisation du réseau.

Conclusion

Dans cet article, nous abordons le défi consistant à vérifier si un tableau donné peut être transformé en une permutation contenant des nombres compris entre 1 et N en divisant par deux ses éléments. Nous fournissons au lecteur les grandes lignes, la syntaxe et les procédures algorithmiques permettant de résoudre efficacement ce problème. De plus, nous proposons deux approches possibles ainsi que des exemples complets de code exécutable C++. En appliquant les techniques basées sur les ensembles ou les stratégies de tri mises en évidence dans cet article, le lecteur peut déterminer à sa satisfaction si un tableau donné remplit toutes les conditions nécessaires pour un arrangement juridique.

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

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

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)

Sujets chauds

Tutoriel PHP
1540
276
C vecteur obtenir le premier élément C vecteur obtenir le premier élément Jul 25, 2025 am 12:35 AM

Il existe quatre méthodes courantes pour obtenir le premier élément de STD :: Vector: 1. Utilisez la méthode avant () pour vous assurer que le vecteur n'est pas vide, a une sémantique claire et est recommandé pour une utilisation quotidienne; 2. Utilisez l'indice [0], et il doit également être jugé vide, avec les performances comparables à la sémantique avant () mais légèrement plus faible; 3. Utiliser * begin (), qui convient à la programmation générique et aux algorithmes STL; 4. Utiliser à (0), sans jugement nul manuellement, mais à faible performance, et lancer des exceptions lors du passage de la frontière, ce qui convient au débogage ou à la manipulation des exceptions; La meilleure pratique consiste à appeler d'abord vide () pour vérifier s'il est vide, puis utiliser la méthode avant () pour obtenir le premier élément pour éviter un comportement non défini.

Utilisation de STD :: Facultatif en C Utilisation de STD :: Facultatif en C Jul 21, 2025 am 01:52 AM

Pour déterminer si STD :: Facultatif a une valeur, vous pouvez utiliser la méthode has_value () ou juger directement dans l'instruction if; Lors du retour d'un résultat qui peut être vide, il est recommandé d'utiliser STD :: Facultatif pour éviter les pointeurs et exceptions nuls; Il ne doit pas être abusé, et les valeurs de retour booléen ou les variables de bool indépendantes conviennent plus à certains scénarios; Les méthodes d'initialisation sont diverses, mais vous devez faire attention à l'utilisation de réinitialisation () pour effacer la valeur et faire attention au cycle de vie et au comportement de construction.

Expliquez Raii en C Expliquez Raii en C Jul 22, 2025 am 03:27 AM

RAII est une technologie importante utilisée dans la gestion des ressources dans C. son cœur réside dans la gestion automatique des ressources tout au long du cycle de vie de l'objet. Son idée principale est: les ressources sont acquises au moment de la construction et libérées à la destruction, évitant ainsi les problèmes de fuite causés par la libération manuelle. Par exemple, lorsqu'il n'y a pas de RAII, l'opération de fichier nécessite un appel manuellement à l'appel. S'il y a une erreur au milieu ou un retour à l'avance, vous pouvez oublier de fermer le fichier; Et après avoir utilisé RAII, comme la classe FileHandle résume l'opération de fichier, le destructeur sera automatiquement appelé après avoir quitté la portée pour libérer la ressource. 1.RAII est utilisé dans la gestion des verrouillage (comme STD :: Lock_Guard), 2. Management de la mémoire (comme STD :: UNIQUE_PTR), 3. Base de données et gestion de la connexion réseau, etc.

Exemple de fonction C Exemple de fonction C Jul 27, 2025 am 01:21 AM

Les fonctions sont l'unité de base de l'organisation du code en C, utilisé pour réaliser la réutilisation et la modulation du code; 1. Les fonctions sont créées par des déclarations et des définitions, telles que INTADD (INTA, INTB) renvoie la somme des deux nombres; 2. Passez les paramètres lors de l'appel de la fonction et renvoyez le résultat du type correspondant après l'exécution de la fonction; 3. La fonction sans rendement de fonction utilise vide comme type de retour, tel que voidgreet (StringName) pour la sortie des informations de salutation; 4. L'utilisation des fonctions peut améliorer la lisibilité du code, éviter la duplication et faciliter la maintenance, qui est le concept de base de la programmation C.

C Bibliothèque standard expliquée C Bibliothèque standard expliquée Jul 25, 2025 am 02:11 AM

La bibliothèque standard C aide les développeurs à améliorer la qualité du code en fournissant des outils efficaces. 1. Les conteneurs STL doivent être sélectionnés selon la scène, tels que le vecteur adapté au stockage continu, la liste adaptée à l'insertion et à la suppression fréquentes, et non ordonné_map convient à la recherche rapide; 2. Les algorithmes de bibliothèque standard tels que le tri, la recherche et la transformation peuvent améliorer l'efficacité et réduire les erreurs; 3. Points intelligents UNIQUE_PTR et PARTAGE_PTR Gérer efficacement la mémoire pour éviter les fuites; 4. D'autres outils tels que facultatif, variante et fonction améliorent la sécurité et l'expressivité du code. La maîtrise de ces fonctions principales peut optimiser considérablement l'efficacité du développement et la qualité du code.

Exemple de manipulation du bit Exemple de manipulation du bit Jul 25, 2025 am 02:33 AM

L'opération de bits peut implémenter efficacement l'opération sous-jacente des entiers, 1. Vérifiez si le i-th bit est 1: utilisez N & (1

Effacez-vous du vecteur tout en itérant Effacez-vous du vecteur tout en itérant Aug 05, 2025 am 09:16 AM

S'il itère lors de la suppression d'un élément, vous devez éviter d'utiliser un itérateur défaillant. ① La manière correcte consiste à l'utiliser = ve.erase (it) et à utiliser l'itérateur valide renvoyé par effacement pour continuer à traverser; ② L'idiome recommandé "effacer" pour la suppression par lots: Vec.erase (std :: retire_if (ve.begin (), ve.end (), condition), ve.end ()), qui est sûr et efficace; ③ Vous pouvez utiliser un itérateur inversé pour supprimer de l'arrière-plan à l'avant, la logique est claire, mais vous devez faire attention à la direction de l'état. Conclusion: Mettez toujours à jour l'itérateur avec la valeur de retour d'effacement, interdisant les opérations sur l'itérateur défaillant, sinon un comportement non défini en résultera.

C Exemple d'expressions de pli C Exemple d'expressions de pli Jul 28, 2025 am 02:37 AM

C FoldeRexpressions est une caractéristique introduite par C 17 pour simplifier les opérations récursives dans les modèles de paramètres variadiques. 1. Le pli gauche (args ...) Sum de gauche à droite, comme la somme (1,2,3,4,5) renvoie 15; 2. Logical et (args && ...) déterminez si tous les paramètres sont vrais, et les paquets vides renvoient vrai; 3. Utiliser (std :: cout

See all articles