AI EducademyAIEducademy
🌳

Fundamentos de IA

🌱
AI Seeds

Empieza desde cero

🌿
AI Sprouts

Construye bases

🌳
AI Branches

Aplica en la práctica

🏕️
AI Canopy

Profundiza

🌲
AI Forest

Domina la IA

🔨

Maestría en IA

✏️
AI Sketch

Empieza desde cero

🪨
AI Chisel

Construye bases

⚒️
AI Craft

Aplica en la práctica

💎
AI Polish

Profundiza

🏆
AI Masterpiece

Domina la IA

🚀

Preparación Profesional

🚀
Plataforma de Entrevistas

Comienza tu camino

🌟
Dominio Conductual

Domina las habilidades blandas

💻
Entrevistas Técnicas

Supera la ronda de código

🤖
Entrevistas de IA y ML

Dominio en entrevistas de ML

🏆
Oferta y Más Allá

Consigue la mejor oferta

Ver Todos los Programas→

Laboratorio

7 experimentos cargados
🧠Playground de Red Neuronal🤖¿IA o Humano?💬Laboratorio de Prompts🎨Generador de Imágenes😊Analizador de Sentimiento💡Constructor de Chatbots⚖️Simulador de Ética
🎯Entrevista simuladaEntrar al Laboratorio→
ViajeBlog
🎯
Acerca de

Hacer la educación en IA accesible para todos, en todas partes

❓
Preguntas Frecuentes

Common questions answered

✉️
Contact

Get in touch with us

⭐
Open Source

Construido de forma abierta en GitHub

Empezar
AI EducademyAIEducademy

Licencia MIT. Open Source

Aprender

  • Académicos
  • Lecciones
  • Laboratorio

Comunidad

  • GitHub
  • Contribuir
  • Código de Conducta
  • Acerca de
  • Preguntas Frecuentes

Soporte

  • Invítame a un Café ☕
  • Términos de Servicio
  • Política de Privacidad
  • Contacto
Académicos de IA e Ingeniería›🪨 AI Chisel›Lecciones›Dos Punteros y Ventana Deslizante
👆
AI Chisel • Intermedio⏱️ 15 min de lectura

Dos Punteros y Ventana Deslizante

Why Scanning Smartly Matters

Imagine an AI monitoring a live video feed for suspicious activity. It cannot rewatch the entire recording every second - it needs to slide a window of attention across the stream, keeping track of just enough context. That is exactly what the two pointers and sliding window patterns do for sequential data.

Both techniques turn brute-force O(n²) scans into elegant O(n) passes.

Two pointers converging from both ends of an array and a sliding window moving across a data stream
Two pointers shrink the search space; a sliding window maintains a running view.

The Two Pointer Technique

Place two references into a sequence and move them according to a rule. There are two main flavours.

Converging Pointers

Start one pointer at each end and move them inward. Perfect for sorted data.

Classic problem - Pair Sum: Given a sorted array, find two numbers that add to a target.

function pairSum(arr, target):
    left = 0
    right = arr.length - 1
    while left < right:
        sum = arr[left] + arr[right]
        if sum == target: return (left, right)
        if sum < target: left += 1
        else: right -= 1
    return null

Because the array is sorted, moving left right increases the sum, and moving right left decreases it - guaranteeing we never miss a valid pair.

Same-Direction Pointers

Both pointers move forward, but at different speeds. Useful for partitioning or cycle detection.

Example - Remove duplicates in-place: A slow pointer marks the write position; a fast pointer scans ahead.

function removeDuplicates(arr):
    slow = 0
    for fast in 1..arr.length - 1:
        if arr[fast] != arr[slow]:
            slow += 1
            arr[slow] = arr[fast]
    return slow + 1
🧠Verificación Rápida

In the converging two-pointer technique on a sorted array, what should you do when the current sum is less than the target?

Lección 1 de 100% completado
←Volver al programa

Discussion

Sign in to join the discussion

Sugerir una edición a esta lección

The Sliding Window Pattern

A sliding window maintains a contiguous sub-sequence of size k (fixed) or variable length, updating aggregates incrementally instead of recalculating from scratch.

Fixed-Size Window

Slide a window of exactly k elements across the array.

Example - Maximum sum of any k consecutive elements:

function maxSubarraySum(arr, k):
    windowSum = sum(arr[0..k-1])
    best = windowSum
    for i in k..arr.length - 1:
        windowSum += arr[i] - arr[i - k]
        best = max(best, windowSum)
    return best

Each step adds the new element entering the window and subtracts the one leaving - O(1) per move.

Variable-Size Window

Expand the window to include more data, then shrink it when a constraint is violated.

Example - Longest substring without repeating characters:

function longestUnique(s):
    seen = {}
    left = 0
    best = 0
    for right in 0..s.length - 1:
        if s[right] in seen and seen[s[right]] >= left:
            left = seen[s[right]] + 1
        seen[s[right]] = right
        best = max(best, right - left + 1)
    return best
🤯
Streaming analytics platforms like Apache Flink use sliding and tumbling windows as first-class primitives - the same concept scaled to millions of events per second.

Real AI Applications

| Pattern | AI Use Case | |---------|------------| | Fixed window | Anomaly detection over the last k sensor readings | | Variable window | Finding the shortest text span containing all query keywords (search engines) | | Converging pointers | Efficient nearest-neighbour checks in sorted embedding dimensions | | Same-direction pointers | Merging sorted result lists from multiple retrieval models |

🤔
Think about it:A voice assistant buffers the last 3 seconds of audio to detect a wake word. Which pattern is this - fixed window or variable window? What happens if the wake word is longer than the buffer?

When to Use Which

  • Two pointers (converging): sorted input, pair/triplet search, palindrome checks.
  • Two pointers (same-direction): in-place modifications, fast/slow runner problems.
  • Fixed sliding window: aggregate over a known window size.
  • Variable sliding window: find the smallest or largest window satisfying a condition.
🧠Verificación Rápida

Which pattern would you choose to find the smallest subarray whose sum exceeds a given value?

🤔
Think about it:Could you combine two pointers with a sliding window? Think about problems where you need to find a pair within a rolling window of data - for instance, detecting duplicate transactions within a five-minute window.

Key Takeaways

  1. Two pointers eliminate nested loops by leveraging ordering or partitioning.
  2. Sliding windows maintain running state so each element is processed at most twice.
  3. Both patterns are foundational in real-time AI pipelines - from anomaly detection to search ranking.
🧠Verificación Rápida

What is the typical time complexity achieved by converting a brute-force nested loop into a two-pointer or sliding-window solution?