Problem
A dynamic array such as C++ std::vector stores its elements in one block of memory. When the block is full and a new element arrives, it allocates a block twice as large, copies the existing elements over, and frees the old one.
Start with an empty array of capacity initial_capacity and push pushes elements one by one. Before each push, if size == capacity, reallocate: count one reallocation, add the current size to the copied elements, and double the capacity.
Implement dynamic_array_growth(pushes, initial_capacity).
Input
pushes: How many elements are pushed.
initial_capacity: The capacity of the empty array.
Output
Return [reallocations, copied_elements, final_capacity].
Einschränkungen
0 ≤ pushes ≤ 10^7
1 ≤ initial_capacity ≤ 10^6
Beispiele
Eingabe:
pushes = 5
initial_capacity = 1
Erwartete Ausgabe:
expected = [3, 7, 8]
Eingabe:
long long pushes = 5;
long long initial_capacity = 1;
Erwartete Ausgabe:
std::vector<long long> expected = {3, 7, 8};
Eingabe:
long pushes = 5;
long initial_capacity = 1;
Erwartete Ausgabe:
long[] expected = new long[] {3, 7, 8};
Erläuterung
Capacity grows 1 → 2 → 4 → 8 when pushing the 2nd, 3rd and 5th elements, copying 1 + 2 + 4 = 7 elements: [3, 7, 8].
Eingabe:
pushes = 4
initial_capacity = 4
Erwartete Ausgabe:
expected = [0, 0, 4]
Eingabe:
long long pushes = 4;
long long initial_capacity = 4;
Erwartete Ausgabe:
std::vector<long long> expected = {0, 0, 4};
Eingabe:
long pushes = 4;
long initial_capacity = 4;
Erwartete Ausgabe:
long[] expected = new long[] {0, 0, 4};
Erläuterung
All four elements fit in the first block, so nothing is reallocated: [0, 0, 4].
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
A reallocation happens only when the array is full.
Hinweis 2
Each time, all current elements are copied and the capacity doubles.
Hinweis 3
You can jump from one doubling to the next instead of simulating every push.
Erwartete Komplexität
O(log pushes) time, O(1) extra space
Referenzen
Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.