Array — trực quan các thao tác

Truy cập theo chỉ số: O(1)

Chèn / xóa giữa: O(n) — phải dịch chuyển

Binary search: O(log n)

function binarySearch(arr, target):
    lo, hi = 0, len(arr)-1
    while lo <= hi:
        mid = (lo + hi) / 2
        if arr[mid] == target: return mid
        if arr[mid] < target:  lo = mid + 1
        else:                  hi = mid - 1
    return -1

Đảo ngược mảng tại chỗ — two pointer: O(n)

function reverse(arr):
    left, right = 0, len(arr)-1
    while left < right:
        swap(arr[left], arr[right])
        left += 1
        right -= 1

Dynamic array — resize doubling (vì sao amortized O(1)?)

Khi size == capacity, cấp mảng mới gấp đôi và copy toàn bộ → lần đó tốn O(n). Nhưng tổng cost của n lần push = O(n), nên trung bình mỗi lần = O(1).

size=0 · capacity=1

Sliding window: tổng lớn nhất cửa sổ k (README §8.3)

Trượt cửa sổ size k: mỗi bước thêm phần tử phải, bỏ phần tử trái → cập nhật tổng O(1) thay vì cộng lại cả cửa sổ. Tím = cửa sổ hiện tại, viền vàng = cửa sổ tổng lớn nhất tới giờ.