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
01:02 min - 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
Viendo ahora - 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
Patrón Ventana Deslizante para Análisis de Datos Secuenciales
Resumen
Cuando trabajas con listas de datos ordenados y necesitas analizar subconjuntos consecutivos que cumplan cierta condición, existe una técnica elegante que simplifica enormemente el proceso. Se trata del patrón ventana deslizante, una estrategia que utiliza dos apuntadores para recorrer la información de forma eficiente y encontrar grupos de datos relevantes sin necesidad de revisar todas las combinaciones posibles.
¿Qué es el patrón ventana deslizante y cuándo se utiliza?
El patrón ventana deslizante (sliding window) es una técnica que emplea dos apuntadores para definir los límites de una "ventana" sobre un conjunto de datos [0:15]. Aunque comparte el uso de dos apuntadores con otras estrategias, su movimiento es distinto: ambos apuntadores comienzan en la misma posición y se desplazan en la misma dirección.
Este patrón resulta especialmente útil cuando:
- Los datos están ordenados y no deben reorganizarse.
- Necesitas analizar un grupo consecutivo de elementos que cumplan una condición específica.
- Quieres calcular valores acumulados, contar elementos sucesivos o evaluar subconjuntos contiguos.
Puede aplicarse a distintos tipos de datos: valores numéricos, cantidades monetarias, nombres de personas o cualquier secuencia donde interese evaluar segmentos consecutivos [0:38].
¿Cómo funciona el movimiento de los apuntadores?
El mecanismo es sencillo pero poderoso. Los dos apuntadores, P1 y P2, arrancan juntos al inicio de la lista [0:52]. A partir de ahí, solo P2 avanza mientras la condición evaluada se siga cumpliendo.
¿Qué sucede cuando la condición deja de cumplirse?
Cuando P2 llega a un elemento que rompe la condición, se detiene [1:05]. En ese momento ya tienes identificado un grupo de datos consecutivos que cumplen el criterio. Puedes entonces:
- Realizar el cálculo necesario sobre ese grupo.
- Guardar ese resultado como una posible respuesta.
- Compararlo con resultados anteriores para quedarte con el mejor.
El cálculo puede hacerse al final del recorrido del grupo o de forma incremental mientras P2 se desplaza [1:12].
¿Cómo se reinicia la ventana para evaluar otros grupos?
Una vez procesado un grupo, llega el momento de descartar elementos y buscar nuevas opciones [1:22]. Aquí hay dos posibilidades según el problema:
- Descartar todos los elementos del grupo anterior y mover P1 hasta donde quedó P2.
- Descartar solo el primer elemento de la ventana, moviendo P1 una posición hacia adelante.
Por ejemplo, si la ventana cubría los elementos desde el inicio hasta cierto punto, podrías reiniciar ambos apuntadores en el siguiente elemento disponible, como el número once en el caso explicado [1:35]. Luego se repite el mismo proceso: P1 se queda fijo y P2 vuelve a avanzar hasta que la condición se rompa nuevamente [1:50].
¿Por qué es eficiente este patrón en problemas de datos consecutivos?
La gran ventaja del patrón ventana deslizante es que evita recorridos redundantes. En lugar de evaluar todas las combinaciones posibles de subconjuntos, cada elemento se visita un número limitado de veces. Esto permite resolver problemas que involucran segmentos contiguos en tiempo lineal o cercano a lineal.
Algunos escenarios típicos donde se aplica:
- Encontrar la subsecuencia más larga que cumpla una condición.
- Calcular la suma máxima de un subconjunto de tamaño fijo.
- Determinar cuántos elementos consecutivos satisfacen un criterio antes de que se rompa.
La clave está en entender que la ventana se expande moviendo P2 hacia adelante y se contrae moviendo P1, lo que permite explorar todas las ventanas relevantes de manera ordenada y sin repetir trabajo.
Si ya conoces el patrón de dos apuntadores moviéndose desde extremos opuestos, el patrón ventana deslizante complementa tu repertorio con un enfoque diferente para problemas donde los datos consecutivos son protagonistas. ¿Has aplicado esta técnica en algún problema? Comparte tu experiencia en los comentarios.