Empecé a resolver problemas algorítmicos hace un poco más de 12 años.
Por lo general, me quedaba varios meses sin resolver problemas y luego entrenaba duro para programar concursos en ráfagas de aproximadamente un mes.
Durante este tiempo, noté que mis habilidades para resolver problemas aumentaron más después de leer la teoría (ya sea en un libro o en buenos sitios web como Usaco o tutoriales Topcoder) en lugar de solo resolver muchos problemas.
Resolver problemas de Topcoder, Code Jam, Codeforces, etc., lo ayudará a mantenerse atento y probablemente resolverá las preguntas de codificación rápidamente. Sin embargo, las entrevistas cubren otras cosas como el diseño del sistema, o la discusión sobre algoritmos (clasificación), estructuras de datos o diferentes soluciones de compromiso en escenarios extremos.
- ¿Hay alguna manera / hay algoritmos para dividir los caracteres chinos en radicales?
- Dado un gráfico dirigido, ¿podemos hacer DFS en cada nodo para encontrar el nodo de mayor valor?
- ¿Es posible implementar un montón dinámico paralelo?
- ¿La técnica de dos punteros se considera una búsqueda binaria en algunos problemas?
- ¿Cómo pruebo que un tipo de matriz N de longitud basada en comparación no se puede hacer en tiempo O (N) en el peor de los casos?
Por lo tanto, es importante asegurarse de tener un conocimiento sólido de la teoría detrás de los algoritmos y estructuras de datos más comunes. Después de esto, 2 horas por día durante aproximadamente un mes debería ser más que suficiente para practicar su conocimiento y ser agudo.