TL;DR
- Le Problème: Maîtriser le problème CTCI 10.8 avec une efficacité de niveau production.
- L'Approche: Problème CTCI 10.8 en Java: afficher les doublons d'un tableau d'entiers avec un vecteur de bits de 4 Ko.
- Complexité: Compromis optimal entre temps et espace.
Cet article propose une explication claire et accessible du problème CTCI 10.8. Nous examinons l'énoncé, comparons l'approche brute à la solution optimale en Java.
1. Analogie du monde réel
Pensez au problème CTCI 10.8 comme à l'organisation efficace d'objets au quotidien. Choisir la bonne structure de données élimine les itérations inutiles.
2. Énoncé clair du problème
Problème 10.8: Problème CTCI 10.8 en Java: afficher les doublons d'un tableau d'entiers avec un vecteur de bits de 4 Ko.
3. Approche optimale et implémentation
public class FindDuplicates {
static class BitSetCustom {
int[] bitset;
public BitSetCustom(int size) {
bitset = new int[(size >> 5) + 1];
}
public boolean get(int pos) {
int wordNumber = (pos >> 5);
int bitNumber = (pos & 0x1F);
return (bitset[wordNumber] & (1 << bitNumber)) != 0;
}
public void set(int pos) {
int wordNumber = (pos >> 5);
int bitNumber = (pos & 0x1F);
bitset[wordNumber] |= (1 << bitNumber);
}
}
public static void checkDuplicates(int[] array) {
BitSetCustom bs = new BitSetCustom(32000);
for (int num : array) {
int num0 = num - 1;
if (bs.get(num0)) {
System.out.println(num);
} else {
bs.set(num0);
}
}
}
}
4. Complexité Temporelle et Spatiale
| Métrique | Complexité | Explication |
|---|---|---|
| Complexité Temporelle | O(N) / O(log N) | Parcours optimal des données |
| Complexité Spatiale | O(1) / O(N) | Empreinte mémoire contrôlée |
5. Cas Limites et Résumé
Vérifiez toujours les conditions aux limites, les valeurs nulles et la taille des tableaux en entretien.
