Contenido del curso
Dos Apuntadores
- 3

Patrón de Dos Apuntadores en Algoritmos de Lista
02:56 min - 4

Verificación de Orden en Diccionario Alienígena
02:56 min - 5

Ordenamiento de Palabras en Idiomas Alienígenas
12:04 min - 6

Playground: Verifying Alien Dictionary
- 7

Ordenación de Palabras en Diccionario Alienígena
15:07 min - 8

Combinar Listas Ordenadas en un Array Ascendente
02:11 min - 9

Ordenamiento de Listas con Complejidad Óptima y Espacio Constante
11:44 min - 10

Playground: Merge Two Sorted Lists
- 11

Intercalación de Listas Ordenadas en Python
09:04 min - 12

Resolver el problema "Container with Most Water" en Python
01:18 min - 13

Cálculo Óptimo de Área en Listas de Alturas
09:02 min - 14

Playground: Container with Most Water
- 15

Implementación de solución de cálculo de área máxima en Java
15:42 min - 16

Implementación de Trapping Rainwater en Complejidad Lineal
Viendo ahora - 17

Retos de Algoritmos con Apuntadores en Python
02:44 min - 18

Patrones de Dos Apuntadores: Soluciones a Problemas Comunes en Python
06:43 min
Ventana Deslizante
- 19

Patrón Ventana Deslizante para Análisis de Datos Secuenciales
02:32 min - 20

Subcadena más larga sin caracteres repetidos: patrón ventana deslizante
01:51 min - 21

Algoritmo de Ventana Deslizante para Subcadenas Únicas
11:05 min - 22

Playground: Longest Substring Without Repeating Characters
- 23

Algoritmo Python para Substring más Largo Sin Repeticiones
14:16 min - 24

Retos de Algoritmos: Dos Apuntadores y Subcadenas
01:50 min - 25

Máximos 1s Consecutivos y Subcadenas sin Repeticiones
03:22 min
Búsqueda Binaria
- 26

Algoritmo de búsqueda binaria en listas ordenadas
09:26 min - 27

Búsqueda en Arrays Rotados: Encontrar Entero en Lista Ordenada
02:19 min - 28

Búsqueda Binaria en Arreglos Rotados
04:59 min - 29

Playground: Search in Rotated Arrays
- 30

Búsqueda en Arrays Rotados con C++
10:53 min - 31

Búsqueda eficiente en matriz ordenada MxN
01:44 min - 32

Búsqueda Binaria en Matrices 2D Ordenadas
06:33 min - 33

Playground: Search 2D Array Matrix
- 34

Búsqueda Binaria en Matrices con Python
07:48 min
Próximos pasos
Implementación de Trapping Rainwater en Complejidad Lineal
Resumen
Si ya dominaste el problema de Container with most water, es momento de dar un paso más con una variación que eleva la dificultad de forma progresiva. Se trata del reto Trapping rainwater, un clásico en entrevistas técnicas y competencias de programación que pone a prueba tu capacidad para pensar en soluciones eficientes.
¿En qué consiste el reto Trapping rainwater?
El planteamiento es similar al ejercicio anterior: se recibe una lista de números que representan alturas de barras en un tablero. Sin embargo, la diferencia clave es que ahora no se busca el contenedor con más agua entre dos barras, sino calcular cuánta agua puede atrapar todo el tablero en conjunto [0:22].
Imagina un perfil de terreno con elevaciones y valles. Cuando llueve, el agua se acumula en los espacios entre las barras más altas. El objetivo es determinar la cantidad total de agua atrapada entre todas las barras.
¿Por qué la complejidad temporal O(n) es importante?
El reto tiene una condición fundamental: la solución debe implementarse con complejidad temporal lineal, es decir, O(n) [0:18]. Esto significa que el algoritmo debe recorrer los datos en una sola pasada o en un número fijo de pasadas, sin bucles anidados que incrementen el tiempo de ejecución.
Algunas estrategias comunes para lograrlo:
- Utilizar dos punteros que se muevan desde los extremos hacia el centro.
- Precalcular las alturas máximas por la izquierda y por la derecha en arreglos auxiliares.
- Mantener un registro del máximo acumulado para determinar cuánta agua cabe en cada posición.
¿Cómo se calcula el agua en cada posición?
Para cada barra, el agua que puede almacenar depende de la altura mínima entre el máximo a su izquierda y el máximo a su derecha, menos la altura de la barra misma. Si ese valor es positivo, se suma al total. Si es negativo o cero, esa posición no atrapa agua.
¿Qué enfoque usar para resolver en O(n)?
La técnica de dos punteros es especialmente elegante para este problema. Se colocan un puntero al inicio y otro al final del arreglo. En cada iteración se avanza el puntero del lado con menor altura máxima, calculando el agua atrapada en esa posición. De esta forma se resuelve en una sola pasada sin estructuras adicionales costosas.
Otra opción válida es usar dos arreglos auxiliares: uno que almacene el máximo desde la izquierda y otro desde la derecha. Con esos datos, una tercera pasada permite sumar el agua total. Aunque usa más memoria, sigue siendo O(n) en tiempo.
¿Cómo practicar y compartir tu solución?
Este tipo de retos fortalece habilidades fundamentales como el pensamiento algorítmico, la optimización de complejidad y el manejo de estructuras de datos lineales. Anímate a implementar tu solución, probarla con distintos casos y compartirla en los comentarios junto con tus dudas o la experiencia que tuviste al resolverlo [0:32].