Aller au contenu
  1. Algorithmes & Structures de données/
#19 Arrays Facile 2 min de lecture

Majority Element

Trouve l’élément qui apparaît PLUS de N/2 fois dans le tableau (il existe toujours). Ex : [2,2,1,1,1,2,2] → 2.

🐻 Vocabulaire pas clair ? Consultez le glossaire algo.

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

On vous donne une liste de nombres, avec la garantie qu’un nombre y apparaît strictement plus de la moitié du temps (plus de N/2 fois). Vous devez retrouver ce nombre majoritaire. Par exemple, dans [2,2,1,1,1,2,2], c’est 2. Imaginez un vote où chaque personne exprime un choix : si un candidat a plus de la moitié des voix, il en a forcément plus que tous les autres réunis — l’astuce consiste à laisser les votes s’annuler deux par deux (un pour, un contre) et à regarder qui reste debout à la fin.

L’idée clé #

Vote de Boyer-Moore : on maintient un candidat et un compteur. Chaque élément identique au candidat vote +1, chaque élément différent vote -1. À zéro, on change de candidat. Comme le majoritaire a plus de voix que TOUS les autres réunis, il survit forcément à la fin.

Pourquoi cette solution ? #

HashMap de comptage = O(N) d’espace ; tri puis élément du milieu = O(N log N). Boyer-Moore fait O(N) temps / O(1) espace — c’est l’algorithme « wow » que l’interviewer espère, et il s’explique en une phrase avec l’image des votes qui s’annulent.

Solution Java #

class Solution {
    public int majorityElement(int[] nums) {
        int candidate = nums[0];
        int count = 0;

        for (int num : nums) {
            if (count == 0) {
                candidate = num; // nouveau candidat quand le score retombe a zero
            }
            count += (num == candidate) ? 1 : -1; // vote pour ou contre
        }
        // L'element majoritaire (> n/2) survit toujours a ce jeu d'annulations
        return candidate;
    }
}

Complexité #

Temps O(N) : une passe. Espace O(1) : deux variables — imbattable.