Tengo que admitir aquí, que soy uno de los que les gusta hacer preguntas de algoritmos en las entrevistas, pero debo enfatizar que la respuesta real a la pregunta es absolutamente irrelevante. No me importa lo más mínimo si el entrevistado sabe la respuesta o no. En cambio, para mí, esta pregunta se dirige a diferentes aspectos, como los siguientes, en orden de importancia:
Requisitos
Estas preguntas están deliberadamente subespecificadas. En su ejemplo, no hay más detalles sobre la secuencia. Si tiene un entrevistado que le pregunta si estos números están realmente ordenados, entonces es una buena señal. Tiene la mentalidad correcta para preguntar a los clientes sobre más detalles, lo que ayudará a encontrar una mejor solución en menos tiempo. El candidato también puede jugar con la idea de usar el espacio O (n) para almacenar una matriz de N números, pero no debe hacerlo sin preguntar sobre más detalles sobre X e Y. Digamos que X e Y están entre 1 y 1000 , entonces seguro, adelante y encienda una solución basada en una matriz. Pero si te digo que el intervalo es de 1 y 1 billón, entonces el problema se vuelve totalmente diferente. Permítanme enfatizar nuevamente que no me importa la solución.
Técnicas estándar
No quiero contratar a un programador que ni siquiera sabe lo que significa O (n). Es absolutamente imprescindible saber si tuvo alguna educación decente en esa área. Pero también es importante no solo saber lo que significa, sino aplicar ese conocimiento. En su ejemplo, quiero que un candidato se dé cuenta de que no se le permite ordenar los datos (sin hacer más preguntas sobre la opción de una clasificación de cubeta u otros enfoques de clasificación O (n)) debido a la clasificación requerida O (n log n) en general.
Del mismo modo, otras preguntas sobre algoritmos se dirigen a técnicas estándar como el recorrido de árbol o gráfico, o recursividad. Un candidato puede resbalar en una de estas técnicas, lo que no causa una buena impresión. En tales casos, sin embargo, me gusta profundizar más para averiguar si el candidato tiene antecedentes de CS. Por supuesto, depende de cuál sea la posición de destino, pero generalmente un desarrollador que no conoce las complejidades del tiempo de ejecución, ni las estructuras de datos típicas y sus recorridos, no será de ninguna ayuda.
Mentalidad para resolver problemas
Después de hacer la pregunta, monitorea al candidato de cerca. ¿Cómo reacciona? Aquí obtienes los mejores resultados de candidatos que no tienen ni idea de cómo resolver el problema al principio . En ese sentido, la pregunta verifica qué podría suceder si una situación similar ocurre en el lugar de trabajo más tarde. Es posible que se encuentre con un problema de este tipo durante su desarrollo, y es bueno saber cómo su candidato aborda estos problemas, incluso si no es capaz de resolverlo por sí solo.
Ejemplo: ¡No desea que su candidato entre en modo silencioso durante la próxima media hora! Verifique si puede formular preguntas inteligentes (ver Requisitos), verifique si comienza a pensar fuera de la caja una vez que se da cuenta de que no puede hacerlo. Incluso una contrapregunta "divertida" como "¿Puedo usar la opción de teléfono como compañero de trabajo?" Es una buena señal.
Cómo responder
En general, las mejores respuestas que puede dar para este tipo de preguntas son contrapreguntas. Decir una respuesta de inmediato básicamente falla todo, y de hecho no es una buena respuesta en absoluto, porque todas estas preguntas apuntan a compensaciones, lo que su respuesta implica, sin que usted tenga la información requerida aún para hacer eso de manera inteligente. compensación. Por supuesto, la calidad de las contrapreguntas varía entre los candidatos.
Como nota general sobre las preguntas de la entrevista: las contrapreguntas rara vez son algo malo. En una de mis propias entrevistas, por ejemplo, me preguntaron algo como lo siguiente: "Si tuviera que implementar X, ¿elegiría C ++ o Java para eso, y por qué?" - Simplemente respondí con "¿Estoy limitado a estos dos?". Adivina por ti mismo, qué tipo de reacción obtienes de un entrevistador para tal contra-pregunta, y qué tan fácil te resulta mostrarle al entrevistador de lo que eres capaz.
find the missing element in O(N) or better¿Qué significa "o mejor" en este contexto? Parece el tipo de cosa que se resolvería con un simple ciclo while, pero de todos modos no lo entiendo: se resuelve o no , ¿verdad?