On m'a posé la question suivante lors de mon entretien d'hier :
Considérons un tableau Java ou C++, par exemple X
qui est trié et dont deux éléments ne sont pas identiques. Comment trouver au mieux un index dire i
tel que l'élément à cet indice est aussi i
. C'est-à-dire X[i] = i
.
En guise de clarification, elle m'a également donné un exemple :
Array X : -3 -1 0 3 5 7
index : 0 1 2 3 4 5
Answer is 3 as X[3] = 3.
Le mieux que j'ai pu imaginer était une recherche linéaire. Après l'entretien, j'ai beaucoup réfléchi à ce problème mais je n'ai pas trouvé de meilleure solution. Mon argument est le suivant : l'élément avec la propriété requise peut se trouver n'importe où dans le tableau. Il peut donc aussi se trouver à la fin du tableau et nous devons vérifier chaque élément.
Je voulais juste que la communauté me confirme que j'ai raison. S'il vous plaît, dites-moi que j'ai raison :)
5 votes
Un algorithme similaire à la recherche binaire devrait donner une meilleure solution.
1 votes
Je ne pense pas qu'Amazon aimerait que vous exposiez leurs questions d'entretien...
2 votes
4 favoris ? ! 5 votes positifs ? ! D'où venez-vous (upvoters, cliqueurs favoris) ? C'est une question très simple. Je n'aurais pas pris un demandeur d'emploi qui ne sait rien d'une recherche binaire et d'interpolation.
0 votes
@Peter - En fait, je doute qu'ils s'en soucient. Si la réponse à cette question est rapide, il y en a toujours une autre à suivre pour sonder la véritable profondeur des connaissances, dans un bon entretien. Ce n'est sûrement pas un grand secret commercial qu'Amazon attend de ses développeurs qu'ils connaissent la recherche binaire.
1 votes
Peter : J'ai édité pour enlever le nom de la société. Alexey : Je connaissais la recherche binaire mais je ne savais pas comment l'appliquer.
10 votes
@Alexey : si elles juste voulant savoir si le candidat connaît la recherche binaire, ils demanderaient simplement de trouver
i
dondex[i] = 3
dans un tableau trié. Cette question est intéressante. Si le candidat y répond immédiatement, il y a de fortes chances qu'il l'ait déjà vue, mais il peut être intelligent et repérer immédiatement l'astuce supplémentaire. Si le candidat répond après 30 secondes, il a repéré l'astuce. S'il ne peut pas répondre, il ne l'a pas repérée. Pour séparer les personnes intelligentes des personnes averties, posez la question avec un tableau defloat
et voyez si vous obtenez la même réponse (maintenant incorrecte) ;-)0 votes
Il s'agit essentiellement d'un problème concernant le théorème du point fixe. On dirait qu'ils ont lu quelques messages de Joel :)
0 votes
"et qu'il n'y a pas deux éléments identiques" est la clé. Sans cette restriction, le PO a raison : L'élément peut être n'importe où dans le tableau (ou même à plusieurs endroits), donc vous ne pouvez pas faire mieux que O(n). (Si je ne me trompe pas.) Donc cela pourrait aussi être un test pour savoir si la personne interrogée lit attentivement les instructions/exigences.
0 votes
Il est plus étroitement lié au théorème de la valeur intermédiaire. Bien qu'il s'applique aux fonctions continues, une approche similaire pourrait être utilisée pour montrer comment la recherche binaire modifiée trouvera l'élément, s'il existe.
0 votes
Comment faire pour que cela fonctionne dans le cas où le tableau a des éléments en double ?