J'ai résolu ce problème à partir des codesfights:Pourquoi mon algorithme O (1) est-il plus complexe?
Note: Ecrivez une solution avec une complexité de temps O (n) et O (1) plus de complexité d'espace, puisque c'est ce que vous devriez faire lors d'une vraie interview.
Étant donné un tableau a qui contient uniquement des nombres compris entre 1 et a.length, recherchez le premier nombre en double dont la deuxième occurrence a l'index minimal. En d'autres termes, s'il y a plus d'un nombre dupliqué, renvoyez le numéro pour lequel la deuxième occurrence a un index plus petit que la deuxième occurrence de l'autre nombre. S'il n'y a pas de tels éléments, retournez -1.
int firstDuplicate(int[] a) {
HashSet z = new HashSet();
for (int i: a) {
if (z.contains(i)){
return i;
}
z.add(i);
}
return -1;
}
Ma solution a réussi tous les tests. Cependant, je ne comprends pas comment ma solution a satisfait à l'exigence de complexité supplémentaire O (1). La taille de la hashtable est directement proportionnelle à l'entrée, donc je pense que c'est O (n) complexité de l'espace. Est-ce que les codes ont mal testé mon algorithme ou est-ce que j'ai mal compris quelque chose?
'seulement des nombres compris entre 1 et a.length' - pourriez-vous clarifier cela? – xenteros
Selon mon expérience, les contraintes d'espace sont généralement testées par des juges en ligne. Ils sont la plupart du temps juste là, donc vous savez que dans une interview réelle, vous pourriez avoir été invité à le faire de cette façon. Vous avez raison, votre algorithme n'utilise clairement pas d'espace supplémentaire constant. – Shalan
@xenteros qu'est-ce qui n'est pas clair à ce sujet? – Sendai