Cómo Elegir Sliding Window o Two Pointers en una Entrevista de Coding

Cómo Elegir Sliding Window o Two Pointers en una Entrevista de Coding

En muchas entrevistas de coding el enunciado habla de arrays o strings y tú dudas entre una ventana deslizante y dos punteros. No son enemigos: la ventana suele ser un caso especial de dos índices. Esta guía te da un chooser rápido para sliding window vs two pointers en una entrevista de coding, con invariantes, plantillas y frases para narrar tu plan.

Clasificación en 10 segundos

Pregúntate:

  1. ¿La respuesta vive en un segmento contiguo (subarray/substring)? → piensa en sliding window
  2. ¿El array está ordenado y buscas un par/trío con una condición? → two pointers desde extremos
  3. ¿Recorres la misma estructura con lectura/escritura in-place (compactar, mover ceros)? → two pointers lento/rápido
  4. ¿Necesitas el mejor segmento con una restricción (“como máximo K distintos”)? → ventana variable + mapa de frecuencias

Frase útil:

“Si es contiguo con una restricción de validez, uso ventana. Si está ordenado y busco pares, uso dos punteros desde los extremos. Si reescribo in-place, uso slow/fast.”

Cuándo elegir sliding window

Señales típicas:

Plantilla mental:

  1. Expandir right
  2. Actualizar contadores
  3. Mientras la ventana sea inválida, avanzar left
  4. Actualizar la respuesta (longitud, suma, etc.)
def longest_at_most_k(s, k):
    from collections import defaultdict
    count = defaultdict(int)
    left = best = 0
    for right, ch in enumerate(s):
        count[ch] += 1
        while len(count) > k:
            count[s[left]] -= 1
            if count[s[left]] == 0:
                del count[s[left]]
            left += 1
        best = max(best, right - left + 1)
    return best

Di en voz alta la invariante: “En todo momento la ventana [left, right] cumple la condición.”

Cuándo elegir two pointers (extremos)

Señales:

def two_sum_sorted(a, target):
    i, j = 0, len(a) - 1
    while i < j:
        s = a[i] + a[j]
        if s == target:
            return i, j
        if s < target:
            i += 1
        else:
            j -= 1
    return None

Frase:

“Como está ordenado, si la suma es pequeña muevo el izquierdo; si es grande, el derecho. Así exploro candidatos sin O(n²).”

Two pointers lento/rápido (in-place)

Señales: eliminar duplicados in-place, mover ceros, particionar.

def remove_duplicates_sorted(a):
    if not a:
        return 0
    slow = 0
    for fast in range(1, len(a)):
        if a[fast] != a[slow]:
            slow += 1
            a[slow] = a[fast]
    return slow + 1

Aquí no hay “ventana válida”; hay un frontier de escritura.

Tabla rápida de decisión

Señal en el enunciadoPatrón
Substring/subarray contiguo + restricciónSliding window
“Exactamente K” contiguoWindow (a menudo atMost(K) − atMost(K−1))
Array ordenado + paresTwo pointers extremos
Reescritura in-placeSlow/fast
Subsecuencia no contiguaNo es window clásico
Máximo subarray sin restricción de “validez” tipo KadaneKadane / DP, no window genérica

Errores que consumen el reloj

  1. Usar ventana cuando el problema no exige contiguidade
  2. Encoger mal: olvidar borrar claves con conteo 0
  3. Confundir “como máximo K” con “exactamente K”
  4. Two pointers en un array no ordenado sin ordenar primero (y sin decir el coste)
  5. No enunciar la invariante: el entrevistador no ve tu lógica

Frase de recuperación:

“Me equivoqué de patrón: esto es contiguo, cambio a ventana con mapa y mantengo la invariante de validez.”

Complejidad que debes decir

Plan de práctica

SesiónEnfoque
1Ventana: sin repetidos / ≤ K distintos
2Ventana mínima que cubre un requisito
3Two sum en array ordenado
4Slow/fast: duplicados / mover ceros
5Solo clasificar 15 enunciados en 15 minutos

Nota suave de práctica

Elegir el patrón con calma es una habilidad que se entrena en voz alta y con temporizador. Si quieres un panel lateral para ensayar esa narración bajo presión, Luna Interview está pensado para práctica estructurada y compostura—antes de la entrevista, no como atajo que rompa las reglas durante ella.

Checklist del día

Primero elige el patrón; el código suele ser contabilidad disciplinado después de eso.