Maison > développement back-end > C++ > Comment pouvez-vous trouver des doublons dans un tableau de nombres de 0 à n-1 dans le temps O(n) et l'espace O(1) ?

Comment pouvez-vous trouver des doublons dans un tableau de nombres de 0 à n-1 dans le temps O(n) et l'espace O(1) ?

Susan Sarandon
Libérer: 2024-10-30 21:23:02
original
686 Les gens l'ont consulté

How can you find duplicates in an array of numbers from 0 to n-1 in O(n) time and O(1) space?

Recherche de doublons dans le temps O(n) et l'espace O(1)

Étant donné un tableau de n éléments contenant des nombres de 0 à n -1, où certains nombres peuvent apparaître plusieurs fois, le but est de trouver les éléments en double en un temps O(n) et en utilisant un espace mémoire constant.

Pour y parvenir, nous pouvons utiliser une approche intrigante qui ne Ne nécessite pas de structures de données supplémentaires telles que des tables de hachage.

L'algorithme proposé fonctionne comme suit :

  1. Boucle de permutation :

    • Parcourez le tableau pour i de 0 à n-1.
    • Dans cette boucle, effectuez les étapes suivantes jusqu'à ce que A[A[i]] soit égal à A[i]. Cela implique que l'élément A[i] est dans sa position correcte.
    • Échangez A[i] avec A[A[i]]. Cela rapproche efficacement l'élément A[i] de sa position correcte.
  2. Boucle d'identification de duplication :

    • Parcourez à nouveau le tableau, de i de 0 à n-1.
    • Si A[i] n'est pas égal à i, cela signifie qu'il y a un double de i à l'index A[i].
    • Imprimez A[i] en double.

Cet algorithme garantit que tous les éléments en double sont identifiés. La boucle externe s'exécute n fois, tandis que la boucle interne s'exécute au plus n-1 fois. Par conséquent, l’algorithme s’exécute en temps O(n). Il n'utilise aucune structure de données supplémentaire, ce qui signifie qu'il fonctionne dans l'espace O(1).

Le code fourni illustre l'implémentation de l'algorithme en C .

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal