Problema
Un array dinámico como C++ std::vector almacena sus elementos en un bloque de memoria. Cuando el bloque está lleno y llega un nuevo elemento, asigna un bloque dos veces más grande, copia los elementos existentes y libera el anterior.
Comienza con un array vacío de capacidad initial_capacity y añade pushes elementos uno por uno. Antes de cada inserción, si size == capacity, reasigna: cuenta una reasignación, suma el tamaño actual a los elementos copiados y duplica la capacidad.
Implementa dynamic_array_growth(pushes, initial_capacity).
Input
pushes: Cuántos elementos se añaden.
initial_capacity: La capacidad del array vacío.
Output
Devuelve [reallocations, copied_elements, final_capacity].
Restricciones
0 ≤ pushes ≤ 10^7
1 ≤ initial_capacity ≤ 10^6
Ejemplos
Entrada:
pushes = 5
initial_capacity = 1
Salida esperada:
expected = [3, 7, 8]
Entrada:
long long pushes = 5;
long long initial_capacity = 1;
Salida esperada:
std::vector<long long> expected = {3, 7, 8};
Entrada:
long pushes = 5;
long initial_capacity = 1;
Salida esperada:
long[] expected = new long[] {3, 7, 8};
Explicación
La capacidad crece 1 → 2 → 4 → 8 al añadir el 2nd, 3rd and 5th elements, copiando 1 + 2 + 4 = 7 elements: [3, 7, 8].
Entrada:
pushes = 4
initial_capacity = 4
Salida esperada:
expected = [0, 0, 4]
Entrada:
long long pushes = 4;
long long initial_capacity = 4;
Salida esperada:
std::vector<long long> expected = {0, 0, 4};
Entrada:
long pushes = 4;
long initial_capacity = 4;
Salida esperada:
long[] expected = new long[] {0, 0, 4};
Explicación
Los cuatro elementos caben en el primer bloque, así que no se reasigna nada: [0, 0, 4].
Cómo abordarlo
Inténtalo primero por tu cuenta y luego abre las pistas una a una.
Pista 1
Solo se reasigna cuando el array está lleno.
Pista 2
Cada vez se copian todos los elementos actuales y la capacidad se duplica.
Pista 3
Puedes saltar de una duplicación a la siguiente en vez de simular cada push.
Complejidad esperada
tiempo O(log pushes), espacio extra O(1)
Referencias
Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.