Tenía 2 años de experiencia cuando recibí una llamada de Goldman sobre la contratación de un determinado equipo. Hubo 6 rondas en total (2 online + 4 presenciales).
Ronda 1: clasificación de hackers
Había 2 preguntas que puedes intentar en casa. Como el lenguaje preferido era Java/Python, usé Java para resolverlos. No recuerdo exactamente las preguntas. Recuerdo un poco la segunda pregunta. la pregunta era:
- Combine elementos adyacentes de una array en función de ciertas condiciones hasta que esa condición se satisfaga. Luego, el resultado fue imprimir el conjunto final de elementos en la array.
Recibí una llamada de recursos humanos después de una semana para finalizar la fecha de la ronda de coderpad. Recursos humanos me pidió que confirmara si dominaba Java/Python o no. Mencioné que conozco Core Java, pero me gustaría usar C++ para codificar, ya que es fácil de codificar usándolo. Me dijo que hablara de esto con el entrevistador. La fecha definitiva fue una semana después de la convocatoria.
Ronda 2: Coderpad
Pude ver que C++ estaba disponible para la codificación. Pero Java se finalizó como el lenguaje de codificación después de una discusión con el entrevistador.
- Dadas dos fracciones que se representan como una array de dos elementos (numerador y denominador), la tarea de encontrar la fracción reducida que es la suma de dos fracciones.
- Dadas dos arrays ordenadas, encuentre la mediana de ellas.
Esta primera pregunta era un problema matemático fácil que también involucrará a GCD. Discutí el enfoque y lo codifiqué en 5-10 minutos. Me perdí el caso de la esquina de los números negativos. Puse validación para lo mismo y luego pasé a la siguiente pregunta.
Este segundo es un problema estándar, pero no conocía el enfoque más rápido. Podría pensar en un enfoque en el que me asegure de que los elementos se mezclan de manera que ambos estén ordenados y el último elemento de la array de la izquierda sea menor o igual que el primer elemento de la array de la derecha. Discutí el enfoque que él entendió y luego comencé a codificar. Casi había terminado la codificación cuando se acabó el tiempo. Dijo que el código podría optimizarse, pero entendió mi enfoque.
Entonces podría pensar en el enfoque O (n) que implica la fusión de dos arrays ordenadas donde en realidad no nos fusionamos y solo tenemos que llevar la cuenta del elemento central. Hay otro enfoque que es O (logn) e implica comparar la mediana de dos arrays ordenadas. La fecha de la ronda presencial se mantuvo después de dos semanas.
Ronda 3 Presencial
- La pregunta fue la modificación de este Buscar el primer recorrido circular que visita todos los surtidores de gasolina . La condición adicional aquí era asegurarse de que la utilización de gasolina fuera mínima.
Fue difícil para mí pensar en el enfoque óptimo al principio. Luego sugerí el enfoque de fuerza bruta en el que en cualquier momento podemos elegir elegir o no elegir la bomba. Podemos elegir el mejor de ellos. Luego, después de un poco de discusión, obtuve una pista después de la cual podría pensar en un enfoque que involucre montón (cola de prioridad). Me pidieron que codificara este enfoque. Luego, la pregunta se modificó nuevamente para agregar una condición de que en cualquier surtidor, no podemos recoger más de x cantidad de gasolina. Hice algunos cambios condicionales en mi enfoque, pero no pude pensar en ninguna otra optimización.
El segundo entrevistador revisó mi currículum y quería hacer algunas preguntas relacionadas con JS. Le comenté que no me sentía cómoda en lo mismo y que me podía pedir JAVA. Dijo que estaba bien y que había terminado. Pero el primer entrevistador me hizo preguntas relacionadas con HashMap, su implementación (factor de carga y otros temas), peor caso de operación de obtención, implementación de montones, etc.
Ronda 4: Presencial
- Dado un conjunto de parejas que representan un juego entre dos equipos en un torneo y el ganador correspondiente de cada pareja, encontrar el resultado de una consulta donde damos dos equipos y tenemos que encontrar un ganador entre ellos (suponiendo que dos equipos no juegan más de una vez).
- Dada una string que puede contener caracteres especiales, la tarea era encontrar si la string formada usando caracteres (ignorando los especiales) es un palíndromo.
Abordé este problema usando un gráfico dirigido. Podemos construir un gráfico dirigido usando los datos del torneo. Si podemos encontrar un camino entre T1 y T2, T1 es el ganador. Si sucede lo mismo de T2 a T1, T2 es el ganador. Si no se encuentra ninguna ruta, los datos son inadecuados.
El enfoque tuvo que optimizarse para la gran cantidad de consultas (10 ^ 5). Usé un hashmap para almacenar datos gráficos (array/lista de adyacencia) que sería óptimo durante la consulta.
Escribí el código en 10 minutos. Me perdí un caso en mi código. Volví a verificar y luego lo envié de nuevo. Es importante tener en cuenta que el código debe ser de grado de producción (sin errores). Incluso si codificamos rápido, la precisión es una preocupación importante. Tómese 5 minutos adicionales pero piense en todos los casos extremos.
Ronda 5: Presencial
Necesitamos diseñar dos métodos: almacenar y consultar. La tarea aquí es asegurarnos de pensar en un enfoque para hacer que estos métodos sean más rápidos. Podemos hacer compensaciones (en este caso, se le puede dar más importancia a la consulta que al almacenamiento; esto no se especificó explícitamente).
Usé hashmap y heap para resolver el problema. El entrevistador quedó satisfecho con el enfoque.
El enfoque fue tener en cuenta que XOR de un número consigo mismo es 0. Si hacemos XOR de n con el conjunto dado, obtendremos x en algún lugar (y se cancelará) en la primera lista. De manera similar, obtendremos x en la segunda lista. Buscar la similitud de un número en dos listas (suponiendo que sea único) dará x. Pude resolver este problema en 5 minutos afortunadamente y el entrevistador pareció satisfecho.
Ronda 6: Presencial
Uno de los entrevistadores me apareció como gerente. Me pidieron que explicara mi trabajo actual en términos sencillos. Luego, había un problema de DS: encontrar un par que tenga la suma más cercana a un número dado X. Codifiqué y expliqué mi enfoque que involucraba dos punteros.
La siguiente pregunta estaba relacionada con DB (uniones). Me acerqué al problema pero no pude encontrar una consulta simplificada. Le expliqué que esto sería fácil de resolver en ABAP (lenguaje utilizado en mi proyecto actual). Pero dijeron que no sería de ninguna utilidad ya que no están al tanto de lo mismo.
La última pregunta era un rompecabezas. Dados 3 trenes que parten a la misma hora y lugar y podemos transferir combustible de un tren a otro tal que el límite no exceda dado X (para todos los trenes), encuentre la distancia máxima recorrida por cualquiera de los trenes. Pude pensar en acercarme después de una pista. Podemos transferir combustible de un tren a otro después de un intervalo de 1/3. Esto se puede generalizar a 1/n para n trenes. La distancia resultante será una progresión armónica. La entrevista terminó con una discusión general.
Recursos Humanos me informó que mi respuesta fue positiva.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA