La preparación para la codificación de entrevistas se puede hacer más fácil si se enfoca en los patrones de codificación. Todo ingeniero de software debe aprender patrones de codificación como Sliding Window , Two Pointers , Two Heaps , etc. Al hacerlo, los ingenieros de software podrán desarrollar la habilidad de "asignar un nuevo problema a uno existente". En esta publicación, aprenderemos qué patrones de codificación tienen el mayor retorno de la inversión para los ingenieros de software.
Grokking the Coding Interview presentó una lista de 18 patrones para codificar preguntas en función de las similitudes en las técnicas necesarias para resolverlas. La idea del curso es enseñar patrones de codificación famosos para que, una vez que alguien se familiarice con un patrón, sea capaz de resolver decenas de problemas con él.
LeetCode (LC), siendo el depósito más grande de problemas de codificación, contiene más de 2k+ preguntas. Cada pregunta en LC se puede etiquetar con uno o más temas. Estos temas son estructuras de datos como Array, HashTable, Tree, etc., o técnicas algorítmicas como Greedy, Divide and Conquer, Sorting, etc., o patrones de codificación como Sliding Window, Depth First Search, Topological Sort, etc. Aquí está el distribución de temas para las preguntas de LC:
El tema principal es Array con 1142 problemas, seguido de String con 549 problemas y así sucesivamente. Echemos un vistazo más de cerca a cada categoría de temas, a saber, estructuras de datos, algoritmos y patrones de codificación.
Aquí están las principales estructuras de datos con el mayor retorno de la inversión:
Estas son las principales técnicas algorítmicas con el mayor retorno de la inversión:
Estos son los principales patrones de codificación con el mayor retorno de la inversión:
Combinando todas las categorías de los datos anteriores, aquí está la lista de los mejores patrones/técnicas de codificación con el ROI más alto:
1. Dos punteros (matrices, cadenas, puntero rápido y lento )
Este patrón cubre un gran conjunto de preguntas relacionadas con matrices y cadenas, que son las estructuras de datos etiquetadas más altas. Puntero rápido y lento puede entenderse fácilmente como una variación del patrón de dos punteros.
2. Ventana deslizante (matrices, cadenas, tablas hash)
Sliding Window cubre la mayoría de los problemas relacionados con las principales estructuras de datos como Arrays, Strings y HashTables.
3. Primera búsqueda de profundidad de árbol y gráfico ( matrices transversales )
La mayoría de los problemas de árboles y gráficos se pueden resolver utilizando la primera búsqueda en profundidad (DFS). Matrix Traversal, que también es un patrón basado en DFS, cubre la mayoría de los problemas relacionados con la matriz.
4. Búsqueda primero en anchura de árbol y gráfico (cola, subconjuntos , matriz transversal , clasificación topológica )
Breadth First Search (BFS) es un patrón muy útil. Los patrones BFS como Subsets, Matrix Traversal y Topological Sort cubren una buena cantidad de problemas.
5. Búsqueda binaria (matrices)
La búsqueda binaria y sus variantes se utilizan para resolver una gran cantidad de preguntas de codificación.
Aunque no hay muchos problemas relacionados con Interval Merge, estos problemas aparecen con frecuencia en la codificación de entrevistas.
7. Recursión/retroceso
El retroceso y la recursividad se utilizan para resolver una amplia gama de problemas. Se recomienda dominar estas técnicas.
La mayoría de las entrevistas de programación incluyen preguntas tipo LeetCode. Los ingenieros de software practican tales problemas de codificación antes de las entrevistas. El mayor retorno de la inversión se logra preparándose de manera inteligente y centrándose en los patrones problemáticos. Puede obtener más información sobre estos patrones y problemas relacionados en Grokking the Coding Interview y Grokking Dynamic Programming for Coding Interviews .