Tất cả thử thách
Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Growing a Dynamic Array

Simulate how a dynamic array doubles its capacity and count the reallocations and copied elements.

Bạn sẽ học được gì

  • See how a vector doubles its capacity
  • Count copies made during reallocation
  • Understand why appending stays fast on average

Đề bài

Xem bản dịch

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].

Ràng buộc

0 ≤ pushes ≤ 10^7

1 ≤ initial_capacity ≤ 10^6

Ví dụ

Ví dụ 1
Đầu vào:
pushes = 5
initial_capacity = 1

Kết quả mong đợi:
expected = [3, 7, 8]
Đầu vào:
long long pushes = 5;
long long initial_capacity = 1;

Kết quả mong đợi:
std::vector<long long> expected = {3, 7, 8};
Đầu vào:
long pushes = 5;
long initial_capacity = 1;

Kết quả mong đợi:
long[] expected = new long[] {3, 7, 8};

Giải thích

Capacity grows 1 → 2 → 4 → 8 when pushing the 2nd, 3rd and 5th elements, copying 1 + 2 + 4 = 7 elements: [3, 7, 8].

Ví dụ 2
Đầu vào:
pushes = 4
initial_capacity = 4

Kết quả mong đợi:
expected = [0, 0, 4]
Đầu vào:
long long pushes = 4;
long long initial_capacity = 4;

Kết quả mong đợi:
std::vector<long long> expected = {0, 0, 4};
Đầu vào:
long pushes = 4;
long initial_capacity = 4;

Kết quả mong đợi:
long[] expected = new long[] {0, 0, 4};

Giải thích

All four elements fit in the first block, so nothing is reallocated: [0, 0, 4].

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

A reallocation happens only when the array is full.

Gợi ý 2

Each time, all current elements are copied and the capacity doubles.

Gợi ý 3

You can jump from one doubling to the next instead of simulating every push.

Độ phức tạp mong đợi

O(log pushes) time, O(1) extra space

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.