¿Cuánta competencia en la estructura de datos y el algoritmo es más que suficiente para ingresar a Google / Facebook y cuál debería ser la estrategia de 4 meses para aprenderlo?

Empecé a codificar hace menos de un año, quizás unos once meses atrás para ser precisos.

Decidí comenzar a programar en C, ya que también lo tenía en mi curso universitario. Después de aprender la sintaxis básica (hasta punteros) comencé a resolver problemas desde la sección de práctica de Hackerrank. No los hice con demasiada frecuencia, tal vez un problema o dos en dos semanas más o menos. Esos problemas parecían difíciles y desafiantes al principio, y muchos de ellos todavía toman tiempo, pero definitivamente a medida que resuelve más y más problemas, comienzan a parecer manejables. Creo que estoy bastante cómodo en matemáticas, y debes tener en cuenta este aspecto. Desde mi experiencia hasta ahora, una buena comprensión de las matemáticas es un gran beneficio en estos desafíos de programación, ya que la idea clave en muchos de los problemas es de naturaleza matemática. Al principio, lleva mucho tiempo convertir la idea clave que se le ocurrió en código real. Pero a medida que practica más y más, el tiempo de conversión disminuye drásticamente y el código comienza a salir rápidamente, sin demasiado esfuerzo. Inicialmente, intente resolver tantos problemas como sea posible.

Luego, hace unos seis meses, leí sobre Google Code Jam y me interesó. Comencé a resolver los problemas de calificación del año pasado en el sitio web de CodeJam. Y los problemas parecían ser cada vez más fáciles de codificar, a medida que resolvía más de ellos.

Habiendo hecho tan pocos problemas (en Hackerrank), no estaba muy seguro de pasar los clasificatorios. Pero luego, después de pasar más de 6 horas, ¡resolví 3 de los 4 problemas correctamente! Pasé el umbral mínimo y obtuve un rango final de aproximadamente 12k (más sobre eso aquí: “The Road Leading to Google Code Jam 2016).

Acabo de participar en Code Jam 2016 Round 1A. Esta ronda fue de una naturaleza mucho más seria en comparación con la Ronda de Calificación, la dificultad fue mayor y duró solo 2 horas y 30 minutos (en comparación con las clasificatorias de un día). Para mi sorpresa, hoy también me las arreglé bastante bien, resolviendo 2 de los 3 problemas correctamente (al menos 1 pequeña entrada correcta). Obtuve un rango de 3k de aproximadamente 6k participantes en esta ronda y perdí en 1B.

Entonces, habiendo tenido al menos un poco de éxito como principiante, destacaré algunos puntos que me han sido útiles:

Intenta resolver tantos problemas como sea posible. Cuanto más practiques, más rápido y mejor no renunciarás a un problema. Dedique al menos un par de horas a un problema determinado. Si no tiene éxito, tome un descanso y regrese nuevamente e intente resolverlo más tarde. Sigue pensando en el problema, lo más probable es que te topes con una idea. Una vez que tenga la idea clave, la codificación no será demasiado difícil. Intente resolver al menos un problema cada semana. Si no hace esto, será más lento a medida que pase más tiempo. Después de resolver el problema por su cuenta, pruebe otras soluciones. A veces son mucho más eficientes y comprenderlos puede ser beneficioso para usted más tarde. Regístrese en el Portal de Entrenamiento de la Olimpiada de Computación de EE. UU. (USACO) e intente completar el curso. (Actualmente estoy haciendo esto)
Después de sentirse cómodo con los problemas, participe en concursos mensuales en sitios web como Codechef. Son divertidos y pueden ayudarte a mantenerte interesado. Podrías inscribirte en un curso de Algoritmos en Coursera, que podría resultar útil no solo para esto, sino también para el trabajo de tu curso si estudias Ciencias de la Computación. es realmente importante No se deje intimidar por un concurso y decida “participar más tarde”. Tenía ese pensamiento en mente, pero decidí probar Code Jam y realmente lo logré. Así que no seas tímido para intentarlo. Incluso si falla, puede seguir intentando los problemas y luego, si es necesario, ver las soluciones.
Seguiré todos estos puntos y espero obtener un rango mucho mejor cuando participe nuevamente el próximo año en Google Code Jam 2017.

Con respecto al libro y la parte de aprendizaje, recomendaría seguir el curso MIT-OCW sobre estructuras de datos (es de uno de los autores del libro “Introducción a los algoritmos”).

Los profesores de video cubren todos los temas y el libro se convierte en un material complementario para leer más e intentar preguntas.

Como mínimo, debería sentirse muy cómodo con las estructuras de datos básicas. Elige un idioma y cúmplelo. Desarrolle competencia en un idioma en lugar de saber algo sobre todos. No importa siempre que sus conceptos básicos de programación sean claros (también hay un curso separado para eso).

Y cuando apunte a compañías como Google, debe conocer conceptos de programación avanzados como programación dinámica, etc.

Los recursos / procedimientos mencionados a continuación son para Técnico / Programación Entrevistas, aplicables a la mayoría de las empresas basadas en productos / Startups tecnológicas (Google y los 4 grandes)

1. Libros: –

  • Cracking The Coding Interview (CtCI) – Compre en línea el libro de entrevistas Cracking the Coding a precios bajos en India
  • Entrevista de programación expuesta (PIE) – Compre entrevistas de programación expuestas: secretos para conseguir su próximo trabajo, libro 3ed (WROX) en línea a precios bajos en India
  • Elementos de entrevistas de programación (EPI) – Compre en línea el libro Elementos de entrevistas de programación a precios bajos en India
  • Estructuras de datos y algoritmos de forma fácil – Compre estructuras de datos y algoritmos de manera fácil: estructuras de datos y rompecabezas de algoritmos Reserve en línea a precios bajos en India

2. Sitios web: –

  • Bit de entrevista – Cursos de InterviewBit – InterviewBit
  • Código Leet – Juez en línea LeetCode
  • Career Cup – Preguntas de la entrevista de programación | CareerCup
  • Geeks para Geeks – GeeksforGeeks | Un portal informático para geeks
  • Hacker Rank – HackerRank
  • Hacker Earth – HackerEarth – Desafíos de programación y trabajo de desarrollador

3. ¿Cómo usar estos recursos?

  • Comience con los libros porque están organizados en perspectiva de entrevista y tienen preguntas selectivas.
  • El número de preguntas no importa (la calidad es más importante que la cantidad)
  • PIE -> CtCI -> EPI
    (Siga el orden. De acuerdo con los niveles de dificultad)
  • Solo haga preguntas fáciles + medias , es decir
    (157 preguntas, 10 / día en 16 días)
  • Utilice estructuras de datos y algoritmos simplificados o Geeks para Geeks como referencia.
  • Luego, para el resto de los días, comience con Interview Bit .
    • En el modo Insano , puedes resolver esto en 30–45 días.
      (Alrededor de 300–350 preguntas)
  • Si quieres más, haz Leet Code .
    • Solo haga preguntas de Editorial + Entrevista .
      (200 – 250 preguntas)

    Nota :

    • No tienes que hacer todos los recursos.
    • Hacer solo libros o sitios web.
  • Si eres un principiante completo, te recomendaría que hagas libros.
    (Por obvias razones)
  • 4. Métodos de programación competitiva ( para entrevistas ): –

    • La respuesta de Siddharth Mahapatra a ¿Cuáles son algunas formas divertidas e interesantes de ser extremadamente bueno en algoritmos y estructuras de datos?

    Debe realizar un nivel de calificación de más de 1200 en Topcoder. O 1700+ en codeforces (cuando Div1 comenzó a las 1700. Consistentemente. Eso generalmente requiere que resuelva más de 500 problemas en jueces en línea. Obviamente, ese número depende de la dificultad de los problemas.

    Como anécdota, más del 50% de los problemas algorítmicos en las entrevistas de Google tienen un elemento de programación dinámica. La mayoría de los problemas de conteo / optimización sí.

    Debería leer CLRS ampliamente. Perlas de programación también.

    He escuchado grandes cosas sobre InterviewBit. Se supone que cubre los conceptos básicos de todos los temas que necesita saber.

    Las entrevistas son notoriamente impredecibles. Muchas personas que trabajan en Google fallaron sus entrevistas de Facebook y viceversa. Entrevista con tantas compañías como sea posible para nivelar el ruido.

    Me he encontrado con preguntas como estas, y también he leído algunas respuestas muy buenas. Sin embargo, entre ellos aquí está el más detallado y descriptivo.

    More Interesting

    ¿Hay algo llamado Algoritmo de Manhattan?

    Si [matemática] f (n) [/ matemática] [matemática] \ en O (n) [/ matemática] y [matemática] g (n) \ en O (n) [/ matemática], es [matemática] f ( g (n)) \ en O (n ^ 2)? [/ matemáticas]

    ¿Hay libros / tutoriales para algoritmos y estructuras de datos que sean más amigables y para principiantes?

    Cómo diseñar una nueva función heurística admisible para un algoritmo A * para resolver el problema del mosaico deslizante

    ¿Cómo Thomas Cormen y sus coautores generaron el índice para su libro clásico de algoritmos?

    Cómo calcular la complejidad del algoritmo de ordenamiento por selección

    ¿Cómo debo codificar el algoritmo en Python?

    ¿Podría dar un algoritmo que calcule la puntuación máxima de la mejor alineación de secuencia (S ', T') de S y T?

    ¿Qué es un problema de horario en la programación? ¿Cómo se convierte en un problema NP difícil?

    Tengo la cadena de entrada, también tengo la cadena encriptada. ¿Cómo averiguo qué algoritmo de cifrado se utilizó?

    ¿Cuáles son los requisitos previos para la introducción del algoritmo antes de tomarlo?

    Cómo verificar si una cadena es un prefijo de otra cadena en O (1)

    ¿Cuál sería su selección de 20 problemas en algoritmos de clasificación (6 problemas de nivel básico, 6 problemas de nivel medio y 8 difíciles) para que resolver esos 20 le daría la máxima comprensión sobre la clasificación?

    ¿Puedes ser bueno en la programación pero malo en los algoritmos?

    ¿Por qué el tipo Bubble se llama Bobble?