Skip to content

Prefix Sum

# O(n)
def prefix_sum(arr):
    prefix = [0] * len(arr)
    prefix[0] = arr[0]

    for i in range(1, len(arr)):
        prefix[i] = prefix[i - 1] + arr[i]

    return prefix


# O(1) : rolling
# "what is the sum of elements in a range [i, j]?"


def prefix_sum_optimized(arr):
    prefix = [0] * len(arr)
    prefix[0] = arr[0]

    for i in range(1, len(arr)):
        prefix[i] = prefix[i - 1] + arr[i]

    def range_sum(i, j):
        if i == 0:
            return prefix[j]
        else:
            return prefix[j] - prefix[i - 1]

    return range_sum