Después de haber practicando algoritmos para entrevistas técnicas, decidí documentar los problemas que he implementado y los aprendizajes que me dejó cada uno. Este es mi registro personal de los ejercicios clásicos que toda empresa tecnológica pide en sus procesos de selección.

Problemas Implementados

1. Binary Search (Búsqueda Binaria)

El punto de partida de toda entrevista. La idea es simple: dado un arreglo ordenado, encontrar un elemento dividiendo el espacio de búsqueda a la mitad en cada iteración.

Complejidad: O(log n)

El código que implementé tiene un bug sutil: usa arrays[mid] == searchValue con comparación débil. En JavaScript moderno conviene usar === para evitar conversiones implícitas de tipo.

2. Quick Sort

Uno de los algoritmos de ordenamiento más eficientes. Usa la estrategia de “divide y vencerás”: seleccionas un pivote, separas los elementos menores a un lado y los mayores al otro, y aplicas recursivamente.

  • Archivo: 02-quickSort.js
  • Complejidad: O(n log n) promedio, O(n²) peor caso

Mi implementación actual no es in-place, lo que significa que usa más memoria de la necesaria. Eso está bien para aprender, pero en entrevista te pedirán la versión in-place con índices.

3. Rotated Search (Búsqueda en Arreglo Rotado)

Aquí las cosas se ponen interesantes. Tienes un arreglo que fue “rotado” en algún punto (por ejemplo, [13, 18, 25, 1, 13, 2, 8, 10]) y necesitas buscar en él. La clave es determinar cuál mitad está ordenada en cada paso.

Este problema combina binary search con lógica adicional para manejar la rotación. Mi versión funciona, pero el test case es demasiado simple.

4. Hash Tables

Implementé una tabla hash desde cero con encadenamiento para manejar colisiones. La función hash es básica (solo suma los charCode de cada caracter), lo cual está bien para aprender, pero en producción necesitarías una función hash criptográficamente más robusta.

5. Two Sum

El clásico de los clásicos. Dado un arreglo y un target, encontrar los índices de dos números que sumen exactamente ese valor.

Mi implementación actual usa fuerza bruta (dos loops anidados), dando O(n²). La solución óptima usa un hash map para lograr O(n), pero aún no la he implementado aquí.

6. Palindrome

Verifica si un número es un palíndromo. Un palíndromo es un número que se lee igual de izquierda a derecha y de derecha a izquierda (por ejemplo, 121, 1331, 12321).

La implementación convierte el número a string y compara el primer carácter con el último, el segundo con el penúltimo, y así sucesivamente. Si algún par no coincide, no es un palíndromo. Los números negativos nunca pueden ser palíndromos debido al signo ”-” inicial.

7. Roman to Integer

Convertir números romanos a enteros. La clave está en manejar los casos donde un símbolo menor precede a uno mayor (como en "IV" = 4 o "IX" = 9), lo cual requiere restar en lugar de sumar.

La lógica es iterar por cada símbolo y comparar con el siguiente para decidir si sumas o restas.

8. Count Words (Banana)

Cuenta cuántas veces se puede formar la palabra “banana” con las letras de un string dado. Cuenta las letras b, a y n, luego calcula el mínimo de divisiones.

Próximos Pasos

Esta lista la iré actualizando, así que puedes guardarlo como un recurso para futuras consultas y darle una estrella en GitHub.

  • Optimizar Two Sum con hash map para O(n)
  • Implementar Palindrome
  • Agregar más problemas clásicos (linked lists, trees, graphs)
  • Practicar con test cases más complejos

Reflexión Final

Estos problemas cubren las categorías fundamentales que verás en entrevistas: búsqueda, ordenamiento, estructuras de datos y lógica de programación. El siguiente paso es optimizar las soluciones (como el Two Sum con hash map en lugar de fuerza bruta) y practicar con test cases más complejos.

La clave para las entrevistas no es memorizar soluciones, sino entender profundamente la lógica detrás de cada algoritmo para poder adaptarlo a cualquier variación del problema.

¿Quieres que desarrolle alguno de estos problemas con más detalle o que implemente las versiones optimizadas?

Recursos