Je dois admettre ici que je fais partie de ceux qui aiment poser des questions d'algorithme lors des entretiens, mais je dois souligner que la réponse réelle à la question est absolument hors de propos. Peu m'importe que la personne interrogée connaisse la réponse ou non. Au lieu de cela, pour moi, cette question cible différents aspects, comme les suivants - par ordre d'importance:
Exigences
Ces questions sont délibérément sous-spécifiées. Dans votre exemple, aucun autre détail n'est donné sur la séquence. Si vous avez une personne interrogée qui vous demande si ces chiffres sont réellement triés, c'est un bon signe. Il a la mentalité correcte pour demander aux clients de plus amples détails, ce qui aidera à trouver une meilleure solution dans un délai plus court. Le candidat peut également jouer avec l'idée d'utiliser l'espace O (n) pour stocker un tableau de N nombres, mais il ne devrait pas le faire sans demander plus de détails sur X et Y. Disons que X et Y sont compris entre 1 et 1000 , alors bien sûr, allez-y et lancez une solution basée sur une baie. Mais si je vous dis que l'intervalle est de 1 et 1 milliard, alors le problème devient totalement différent. Permettez-moi de souligner à nouveau que je ne me soucie pas de la solution.
Techniques standard
Je ne veux pas engager un programmeur qui ne sait même pas ce que signifie O (n). C'est un must absolu si vous avez reçu une éducation décente dans ce domaine. Mais il est également important de ne pas simplement savoir ce que cela signifie, mais d'appliquer réellement ces connaissances. Dans votre exemple, je veux qu'un candidat se rende compte qu'il n'est pas autorisé à trier les données (sans poser d'autres questions ciblant l'option d'un tri par compartiment ou d'autres approches de tri O (n)) en raison du tri requis O (n log n) en général.
De même, d'autres questions d'algorithme ciblent des techniques standard comme la traversée d'arbre ou de graphe, ou la récursivité. Un candidat peut glisser à l'une de ces techniques, ce qui ne fait pas bonne impression. Dans de tels cas, cependant, j'aime creuser plus profondément pour savoir si le candidat a des antécédents CS. Bien sûr, cela dépend de la position cible, mais généralement un développeur qui ne connaît pas les complexités d'exécution, ni les structures de données typiques et leurs traversées, ne sera d'aucune aide.
État d'esprit de résolution de problèmes
Après avoir posé la question, vous surveillez attentivement le candidat. Comment réagit-il? Vous obtenez ici les meilleurs résultats de candidats qui ne savent absolument pas comment résoudre le problème dans un premier temps . À cet égard, la question vérifie ce qui pourrait se produire si une situation similaire se produisait plus tard sur le lieu de travail. Vous pouvez rencontrer un tel problème au cours de votre développement, et il est bon de savoir comment votre candidat gère ces problèmes, même s'il n'est pas en mesure de le résoudre tout seul.
Exemple: vous ne voulez pas que votre candidat passe en mode silencieux pendant la prochaine demi-heure! Vérifiez s'il peut trouver des questions intelligentes (voir Exigences), vérifiez s'il commence à penser hors de la boîte une fois qu'il se rend compte qu'il ne peut pas le faire. Même une contre-question "amusante" comme "Puis-je utiliser l'option téléphone-un collègue?" est un bon signe.
Comment répondre
En général, les meilleures réponses que vous pouvez donner pour ce genre de questions sont des contre-questions! Dire une réponse tout de suite échoue fondamentalement, et ce n'est en fait pas une bonne réponse du tout, car toutes ces questions suggèrent des compromis, ce que votre réponse implique, sans que vous ayez les informations requises pour le faire intelligemment troquer. Bien entendu, la qualité des contre-questions varie selon les candidats.
Remarque générale sur les questions d'entrevue: les contre-questions sont rarement une mauvaise chose. Dans une de mes propres interviews, on m'a par exemple demandé quelque chose comme ceci: "Si vous deviez implémenter X, choisiriez-vous C ++ ou Java pour cela, et pourquoi?" - J'ai simplement répliqué par "Suis-je limité à ces deux?". Devinez par vous-même, quel type de réaction vous obtenez d'un intervieweur pour une telle contre-question - et à quel point il est facile pour vous de montrer à l'enquêteur ce dont vous êtes capable.
find the missing element in O(N) or better
Que signifie «ou mieux» dans ce contexte? Cela semble être le genre de chose qui serait résolu avec une simple boucle while, mais de toute façon je ne comprends pas - c'est résolu ou pas résolu , non?