Dos punteros en C: ejercicio resuelto
Dos punteros en C: ejercicio resuelto
Si buscas dos punteros en C ejercicio resuelto, aquí tienes tres aplicaciones clásicas de la técnica: encontrar un par con suma objetivo en un array ordenado, revertir un array in-place y eliminar duplicados de un array ordenado, todos en O(n) y sin memoria adicional.
La técnica de dos punteros consiste en mantener dos índices que avanzan desde los extremos hacia el centro (o ambos hacia la derecha a velocidades distintas) para evitar el doble bucle O(n²).
Enunciado
Dado el array ordenado {1, 2, 3, 4, 6, 8, 11}:
- Encuentra todos los pares con suma 10.
- Revierte el array in-place.
- Dado
{1, 1, 2, 2, 3, 4, 4, 5}, elimina los duplicados y devuelve la nueva longitud.
Solución en C
Resultado esperado
Errores frecuentes
- Aplicar dos punteros sobre un array no ordenado para la búsqueda de par: la técnica solo funciona si el array está ordenado.
- No actualizar ambos punteros cuando se encuentra el par: quedarse en el mismo índice provoca un bucle infinito.
- Confundir el puntero de lectura con el de escritura en la eliminación de duplicados: el puntero de escritura avanza solo cuando hay un elemento nuevo.
- Usar índices con signo cuando el array tiene tamaño 0:
der = n - 1conn = 0da -1 y el bucle no se ejecuta correctamente en todos los compiladores.
Aplicación práctica
Dos punteros es una técnica fundamental en problemas de arrays y cadenas: suma de tres números, contenedor con más agua, palíndromos y partición de arrays. Aparece con frecuencia en entrevistas técnicas y es la base de algoritmos más complejos como la ventana deslizante.
Siguiente ejercicio recomendado
- Máximo subarray: Kadane en C: ejercicio resuelto
- Eliminar duplicados en array ordenado en C
- Búsqueda binaria en C: ejercicio resuelto
- Todos los ejercicios de C
Práctica guiada y libro completo
Si quieres una ruta completa con progresión real de dificultad:
FAQ
¿Por qué la técnica de dos punteros requiere que el array esté ordenado?
Porque la lógica de avance depende de comparar la suma con el objetivo: si la suma es demasiado pequeña, avanzar el puntero izquierdo aumenta la suma (elementos más grandes hacia la derecha); si es demasiado grande, retroceder el derecho la reduce. Sin orden, no hay garantía de que mover un puntero cambie la suma en la dirección correcta.
¿Cuándo usar dos punteros frente a una tabla hash?
Dos punteros funciona en O(n) con O(1) de espacio extra y requiere el array ordenado. Una tabla hash también da O(n) pero usa O(n) de espacio y no requiere ordenación previa. Se prefiere dos punteros cuando el espacio es limitado o el array ya está ordenado.
¿Se puede aplicar la técnica con más de dos punteros?
Sí. El problema de tres sumas (3-sum) fija un elemento con un bucle exterior y aplica dos punteros en el interior, logrando O(n²) en lugar del O(n³) del enfoque de fuerza bruta.