Prefix Sum Array in DSA C# - 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 to create this array grow as the input list gets bigger?
Analyze the time complexity of the following code snippet.
int[] BuildPrefixSum(int[] nums) {
int n = nums.Length;
int[] prefixSum = new int[n];
prefixSum[0] = nums[0];
for (int i = 1; i < n; i++) {
prefixSum[i] = prefixSum[i - 1] + nums[i];
}
return prefixSum;
}
This code creates a new array where each element is the sum of all numbers up to that position in the original array.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop that adds the current number to the sum of all previous numbers.
- How many times: This loop runs once for each element after the first, so (n - 1) times.
As the input size grows, the number of additions grows roughly the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 9 additions |
| 100 | 99 additions |
| 1000 | 999 additions |
Pattern observation: The operations increase directly with the input size, almost one addition per element.
Time Complexity: O(n)
This means the time to build the prefix sum grows in a straight line with the size of the input array.
[X] Wrong: "Since we add sums repeatedly, the time must be quadratic (like n squared)."
[OK] Correct: Each addition uses the previous sum, so we do only one addition per element, not a new sum from scratch each time.
Knowing how prefix sums work and their time cost helps you answer questions about fast range queries and cumulative calculations.
"What if we changed the code to compute prefix sums recursively? How would the time complexity change?"
Practice
Prefix Sum Array in algorithms?Solution
Step 1: Understand what prefix sums represent
A prefix sum array stores cumulative sums of elements from the start up to each index.Step 2: Identify the use of prefix sums
Using prefix sums, we can find the sum of any subarray quickly by subtracting two prefix sums.Final Answer:
To quickly find the sum of elements in any subarray -> Option AQuick Check:
Prefix Sum Array = Fast subarray sums [OK]
- Thinking prefix sums sort the array
- Confusing prefix sums with maximum element search
- Assuming prefix sums reverse the array
prefix from an integer array arr?Solution
Step 1: Check initialization of prefix array
int[] prefix = new int[arr.Length]; prefix[0] = arr[0]; for(int i=1; iStep 2: Verify loop for cumulative sum
The loop starts from 1 and adds prefix[i-1] + arr[i], correctly building prefix sums.Final Answer:
int[] prefix = new int[arr.Length]; prefix[0] = arr[0]; for(int i=1; i -> Option CQuick Check:
Correct prefix sum initialization = int[] prefix = new int[arr.Length]; prefix[0] = arr[0]; for(int i=1; i
- Using wrong array length for prefix
- Starting loop from 0 instead of 1
- Accessing arr out of bounds (like arr[i] when i == arr.Length)
arr = new int[] {2, 4, 6, 8} and its prefix sum array prefix computed as usual, what is the output of prefix[3] - prefix[1]?Solution
Step 1: Compute prefix sum array
prefix[0]=2, prefix[1]=2+4=6, prefix[2]=6+6=12, prefix[3]=12+8=20Step 2: Calculate prefix[3] - prefix[1]
20 - 6 = 14Final Answer:
14 -> Option DQuick Check:
Sum from index 2 to 3 = 6+8 = 14 [OK]
- Confusing indices and subtracting wrong prefix values
- Adding prefix sums instead of subtracting
- Forgetting prefix sums start at index 0
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 initialization of prefix[0]
Setting prefix[0] = 0 is incorrect; it should be arr[0] to start cumulative sum correctly.Step 2: Verify loop and array length
The loop starting at 1 and array length are fine; only prefix[0] initialization is wrong.Final Answer:
prefix[0] should be arr[0], not 0 -> Option BQuick Check:
Correct prefix start = arr[0] [OK]
- Starting loop at 0 causing index errors
- Using wrong prefix array size
- Assuming zero initialization is always correct
arr of length 6: {3, 1, 4, 1, 5, 9}. You want to find the sum of elements from index 2 to 5 inclusive using a prefix sum array prefix where prefix[i] stores sum of elements from index 0 to i. Which expression correctly computes this sum?Solution
Step 1: Understand prefix sum indexing
prefix[i] = sum of arr[0] to arr[i]. To get sum from index 2 to 5, subtract prefix[1] (sum up to index 1) from prefix[5].Step 2: Write the correct expression
Sum = prefix[5] - prefix[1]Final Answer:
prefix[5] - prefix[1] -> Option AQuick Check:
Sum(2 to 5) = prefix[5] - prefix[1] [OK]
- Subtracting prefix[i] instead of prefix[i-1]
- Adding prefix sums instead of subtracting
- Using wrong indices for prefix array
Ready to prove it?
Pass the test and this pattern moves unknown
