Carrying Forward

A medium Python interview practice problem on DataDriven. Write the Python and run it against test cases, with instant feedback.

Domain
Python
Difficulty
medium
Seniority
L3

Problem

You're rolling a ledger of daily deposits into a running account balance for a dashboard. Given the deposits in the order they landed, return the balance standing after each one.

The total grows with every row.

Example 1

Input:

deposits = [1,2,3,4]

Output:

[1,3,6,10]

Example 2

Input:

deposits = []

Output:

[]

Worked solution and explanation

What this really is

This is a prefix sum wearing a ledger costume. The skill being probed: can you carry state across a single pass instead of recomputing it? Anyone can produce the right numbers. The trap is reaching for sum(deposits[:i+1]) at each position, which re-adds the same prefix over and over and turns an O(n) walk into O(n^2) that quietly dies on a 10k-element ledger. Get the accumulator right and the empty list falls out for free, no special case.


Break down the requirements

Step 1: Maintain a running total in one pass

Initialize total = 0, loop over deposits, update total += amount, append total to the output list. Single pass, no nested loops. The naive O(n^2) is sum(deposits[:i+1]) for each i, which recomputes the same prefixes repeatedly and is a red flag at any level above junior.

Step 2: Preallocate or append; both are O(n)

Python list.append has amortized O(1) cost, so the append-in-loop version hits O(n) total. Preallocating [0] * len(deposits) and assigning by index is the same asymptotic cost but uses more code. Append is cleaner and equally fast.

Step 3: Return [] for empty input with no branch

Looping over [] produces no iterations, the output list stays [], the return value is []. No 'if not deposits: return []' branch needed. Writing it is a tell that you do not trust the loop.


The solution

Accumulate in one pass
def running_total(deposits):
    balances = []
    total = 0
    for amount in deposits:
        total += amount
        balances.append(total)
    return balances

Common follow-up questions