Prefix Sum Array in DSA Java - Time & Space Complexity
We want to understand how fast we can build a prefix sum array from a list of numbers.
How does the time needed grow as the list gets longer?
Analyze the time complexity of the following code snippet.
int[] prefixSum(int[] arr) {
int n = arr.length;
int[] prefix = new int[n];
prefix[0] = arr[0];
for (int i = 1; i < n; i++) {
prefix[i] = prefix[i - 1] + arr[i];
}
return prefix;
}
This code creates a new array where each element is the sum of all elements up to that position in the original array.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: A single for-loop that adds the current element to the sum of all previous elements.
- How many times: The loop runs once for each element after the first, so (n - 1) times.
As the input list grows, the number of additions grows roughly the same as the number of elements.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 9 additions |
| 100 | 99 additions |
| 1000 | 999 additions |
Pattern observation: The operations increase linearly as the input size increases.
Time Complexity: O(n)
This means the time to build the prefix sum grows in direct proportion to the size of the input array.
[X] Wrong: "Since each prefix sum depends on the previous one, this must be slower than linear time."
[OK] Correct: Each step only does one addition, so the total work still grows linearly, not more.
Understanding prefix sums and their time complexity helps you solve many problems efficiently, like range sums or frequency counts.
"What if we computed prefix sums using recursion instead of a loop? How would the time complexity change?"
Practice
arr?Solution
Step 1: Understand prefix sum definition
A prefix sum array stores sums of elements from the start of the array up to each index.Step 2: Compare options with definition
Only An array where each element is the sum of all elements up to that index inarrmatches this definition exactly.Final Answer:
An array where each element is the sum of all elements up to that index in arr -> Option AQuick Check:
Prefix sum = cumulative sum [OK]
- Confusing prefix sum with product or max operations
- Thinking prefix sum stores differences
- Mixing prefix sum with suffix sum
prefix for an integer array arr?Solution
Step 1: Check initialization of prefix array
Prefix sum array must start with prefix[0] = arr[0] to include first element sum.Step 2: Verify loop calculation
Loop from i=1 to end adds previous prefix sum plus current arr element, which is correct.Final Answer:
int[] prefix = new int[arr.length]; prefix[0] = arr[0]; for(int i=1; i -> Option CQuick Check:
Initialize first element, then add previous sums [OK]
- Starting prefix[0] with 0 instead of arr[0]
- Multiplying instead of adding elements
- Reversing array elements instead of summing
int[] arr = {2, 4, 6, 8};
int[] prefix = new int[arr.length];
prefix[0] = arr[0];
for(int i = 1; i < arr.length; i++) {
prefix[i] = prefix[i-1] + arr[i];
}
System.out.println(java.util.Arrays.toString(prefix));Solution
Step 1: Calculate prefix sums step-by-step
prefix[0] = 2; prefix[1] = 2 + 4 = 6; prefix[2] = 6 + 6 = 12; prefix[3] = 12 + 8 = 20;Step 2: Verify final prefix array
The prefix array is [2, 6, 12, 20].Final Answer:
[2, 6, 12, 20] -> Option AQuick Check:
Sum accumulates: 2, 6, 12, 20 [OK]
- Printing original array instead of prefix sum
- Starting prefix sum with 0 incorrectly
- Adding wrong elements in loop
int[] arr = {1, 3, 5};
int[] prefix = new int[arr.length];
prefix[0] = 0;
for(int i = 1; i <= arr.length; i++) {
prefix[i] = prefix[i-1] + arr[i];
}Solution
Step 1: Check loop boundary
The loop uses i <= arr.length, which causes index out of bounds because valid indices are 0 to arr.length-1.Step 2: Check prefix[0] initialization and array access
prefix[0] should be arr[0] to start sums correctly; also arr[i] access fails at i = arr.length.Step 3: Combine all errors
All issues cause runtime errors or incorrect prefix sums.Final Answer:
All of the above -> Option DQuick Check:
Loop bounds, initialization, and indexing errors combined [OK]
- Using <= instead of < in loop condition
- Initializing prefix[0] incorrectly
- Accessing array out of bounds
arr of length 5: {3, 1, 4, 1, 5}, you want to find the sum of elements from index 1 to 3 (inclusive) efficiently using a prefix sum array. Which expression correctly calculates this sum using the prefix sum array prefix where prefix[i] is the sum of elements from index 0 to i?Solution
Step 1: Understand prefix sum usage for range sums
Sum from index l to r = prefix[r] - prefix[l-1]. Here l=1, r=3.Step 2: Apply formula with given indices
Sum = prefix[3] - prefix[0]. prefix[0] is sum up to index 0, so subtracting it leaves sum from 1 to 3.Final Answer:
prefix[3] - prefix[0] -> Option BQuick Check:
Range sum = prefix[r] - prefix[l-1] [OK]
- Subtracting prefix at wrong index
- Adding extra elements unnecessarily
- Confusing inclusive indices
Ready to prove it?
Pass the test and this pattern moves unknown
