Aller au contenu
  1. Algorithmes & Structures de données/
#15 Math & Bits Facile 2 min de lecture

Single Number

Chaque élément du tableau apparaît exactement deux fois, sauf UN qui apparaît une seule fois. Trouve-le en temps linéaire et SANS mémoire supplémentaire.

🐻 Vocabulaire pas clair ? Consultez le glossaire algo.

C’est quoi le problème, en clair ? #

Dans une liste de nombres, chacun apparaît exactement deux fois, sauf un seul intrus qui n’apparaît qu’une fois — il faut le retrouver. Imaginez une pile de chaussettes qui devraient toutes être par paires : vous devez repérer la chaussette solitaire, mais sans le droit de poser un carnet pour noter celles déjà vues (c’est la contrainte « pas de mémoire supplémentaire »). L’astuce consiste à utiliser une opération mathématique un peu spéciale qui fait disparaître automatiquement tout ce qui va par paire, ne laissant que l’élément seul à la fin.

L’idée clé #

Le XOR (^) a deux propriétés magiques : a ^ a = 0 (un nombre s’annule avec lui-même) et a ^ 0 = a. En XORant tout le tableau, toutes les paires s’annulent : il ne reste que l’élément unique. Ordre indifférent car XOR est commutatif.

Pourquoi cette solution ? #

La contrainte « O(1) d’espace » élimine la HashMap et force le bit-trick — l’interviewer teste ta connaissance des opérateurs binaires. Une boucle, une variable, zéro structure : la réponse la plus courte de cette liste.

Solution Java #

class Solution {
    public int singleNumber(int[] nums) {
        int result = 0; // 0 est neutre pour le XOR

        for (int num : nums) {
            result ^= num; // les paires s'annulent (a ^ a = 0)
        }
        // Il ne reste que l'element apparu une seule fois
        return result;
    }
}

Complexité #

Temps O(N) : une passe. Espace O(1) : une seule variable — exactement ce que la contrainte exige.