Bird
Raised Fist0
DSA C++programming~5 mins

Prefix Sum Array in DSA C++ - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a Prefix Sum Array?
A Prefix Sum Array is a new array where each element at index i is the sum of all elements from the start up to index i in the original array. It helps to quickly find the sum of any subarray.
Click to reveal answer
beginner
How do you compute the prefix sum array for an array [2, 4, 6, 8]?
Start with the first element: prefix[0] = 2.
Then add each element to the sum of previous elements:
prefix[1] = 2 + 4 = 6,
prefix[2] = 6 + 6 = 12,
prefix[3] = 12 + 8 = 20.
So the prefix sum array is [2, 6, 12, 20].
Click to reveal answer
intermediate
How can prefix sum arrays help in finding the sum of elements between two indices i and j quickly?
The sum from index i to j can be found by subtracting prefix[i-1] from prefix[j]. If i is 0, then the sum is just prefix[j]. This avoids adding elements one by one.
Click to reveal answer
beginner
What is the time complexity to build a prefix sum array for an array of size n?
The time complexity is O(n) because we compute each prefix sum element by adding the current element to the previous prefix sum once.
Click to reveal answer
beginner
Write the formula to compute prefix sum at index i.
prefix[i] = prefix[i-1] + original[i], for i > 0
prefix[0] = original[0]
Click to reveal answer
What does prefix sum array store at each index?
AProduct of all elements from start to that index
BDifference between elements at index and previous index
CSum of all elements from start to that index
DMaximum element from start to that index
If prefix sum array is [3, 7, 12, 18], what is the sum of elements from index 1 to 3?
A15
B18
C12
D9
What is the time complexity to find the sum of any subarray using prefix sums?
AO(n)
BO(1)
CO(log n)
DO(n^2)
Which of the following is the correct way to initialize prefix sum array?
Aprefix[0] = original[0]
Bprefix[0] = 0
Cprefix[0] = original[1]
Dprefix[0] = original[n-1]
What is the prefix sum of an empty array?
AUndefined
B[0]
C[1]
DEmpty array
Explain how to build a prefix sum array from a given array.
Think about adding elements one by one and storing sums.
You got /4 concepts.
    Describe how prefix sum arrays help in finding the sum of any subarray quickly.
    Consider how subtraction of prefix sums gives subarray sum.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does a prefix sum array represent for a given array arr?
      easy
      A. An array where each element is the difference between the current and previous element in arr
      B. An array where each element is the product of all elements from the start up to that index in arr
      C. An array where each element is the sum of all elements from the start up to that index in arr
      D. An array where each element is the maximum value found in arr up to that index

      Solution

      1. Step 1: Understand prefix sum array definition

        A prefix sum array stores cumulative sums, where each element at index i is the sum of all elements from index 0 to i in the original array.
      2. Step 2: Compare options with definition

        Only An array where each element is the sum of all elements from the start up to that index in arr correctly describes this cumulative sum property. Other options describe different operations.
      3. Final Answer:

        An array where each element is the sum of all elements from the start up to that index in arr -> Option C
      4. Quick Check:

        Prefix sum = cumulative sum [OK]
      Hint: Prefix sum means adding elements from start to current index [OK]
      Common Mistakes:
      • Confusing prefix sum with product or max operations
      • Thinking prefix sum stores differences
      • Assuming prefix sum resets at each index
      2. Which of the following C++ code snippets correctly initializes a prefix sum array prefix from an integer array arr of size n?
      easy
      A. prefix[0] = 0; for(int i = 1; i <= n; i++) prefix[i] = prefix[i-1] + arr[i];
      B. prefix[0] = arr[0]; for(int i = 1; i < n; i++) prefix[i] = prefix[i-1] + arr[i];
      C. prefix[0] = arr[0]; for(int i = 0; i < n; i++) prefix[i] = prefix[i-1] + arr[i];
      D. prefix[0] = arr[0]; for(int i = 1; i < n; i++) prefix[i] = arr[i] - prefix[i-1];

      Solution

      1. Step 1: Check initialization of prefix array

        Prefix sum starts with prefix[0] = arr[0], which is correct in options B, C, and D.
      2. Step 2: Verify loop and summation logic

        prefix[0] = arr[0]; for(int i = 1; i < n; i++) prefix[i] = prefix[i-1] + arr[i]; correctly loops from i=1 to n-1 and adds prefix[i-1] + arr[i]. prefix[0] = 0; for(int i = 1; i <= n; i++) prefix[i] = prefix[i-1] + arr[i]; has wrong indexing and loop range. prefix[0] = arr[0]; for(int i = 0; i < n; i++) prefix[i] = prefix[i-1] + arr[i]; uses prefix[i-1] at i=0 which is invalid. prefix[0] = arr[0]; for(int i = 1; i < n; i++) prefix[i] = arr[i] - prefix[i-1]; subtracts instead of adding.
      3. Final Answer:

        prefix[0] = arr[0]; for(int i = 1; i < n; i++) prefix[i] = prefix[i-1] + arr[i]; -> Option B
      4. Quick Check:

        Initialize first, then add previous prefix + current [OK]
      Hint: Start prefix[0] = arr[0], then add previous prefix + current [OK]
      Common Mistakes:
      • Starting loop at 0 and accessing prefix[-1]
      • Using wrong loop bounds (<= n instead of < n)
      • Subtracting instead of adding elements
      3. What is the output of the following C++ code?
      int arr[] = {2, 4, 6, 8};
      int n = 4;
      int prefix[4];
      prefix[0] = arr[0];
      for(int i = 1; i < n; i++) {
          prefix[i] = prefix[i-1] + arr[i];
      }
      for(int i = 0; i < n; i++) {
          std::cout << prefix[i] << " ";
      }
      medium
      A. 2 6 12 20
      B. 2 4 6 8
      C. 2 8 14 20
      D. 2 6 10 18

      Solution

      1. Step 1: Calculate prefix sums step-by-step

        prefix[0] = 2
        prefix[1] = prefix[0] + arr[1] = 2 + 4 = 6
        prefix[2] = prefix[1] + arr[2] = 6 + 6 = 12
        prefix[3] = prefix[2] + arr[3] = 12 + 8 = 20
      2. Step 2: Print prefix array elements

        Output is: 2 6 12 20
      3. Final Answer:

        2 6 12 20 -> Option A
      4. Quick Check:

        Sum accumulates: 2, 6, 12, 20 [OK]
      Hint: Add current element to previous prefix sum each step [OK]
      Common Mistakes:
      • Printing original array instead of prefix sums
      • Incorrect addition order
      • Off-by-one errors in loop
      4. Identify the error in the following prefix sum array code and select the corrected version:
      int arr[] = {1, 3, 5, 7};
      int n = 4;
      int prefix[4];
      prefix[0] = arr[0];
      for(int i = 1; i <= n; i++) {
          prefix[i] = prefix[i-1] + arr[i];
      }
      medium
      A. Change loop condition to i < n to avoid out-of-bounds access
      B. Initialize prefix[0] = 0 instead of arr[0]
      C. Use i = 0 as loop start and keep condition i < n
      D. Replace prefix[i] with arr[i] inside loop

      Solution

      1. Step 1: Analyze loop bounds and array indexing

        The loop runs with i from 1 to n inclusive (i <= n). Since arrays are 0-indexed, prefix[n] and arr[n] access out-of-bounds elements causing runtime error.
      2. Step 2: Correct loop condition

        Changing loop condition to i < n ensures indices stay within valid range (0 to n-1).
      3. Final Answer:

        Change loop condition to i < n to avoid out-of-bounds access -> Option A
      4. Quick Check:

        Loop must stay within array size [OK]
      Hint: Loop index must be less than array size, not less or equal [OK]
      Common Mistakes:
      • Using <= n causing out-of-bounds errors
      • Starting loop at 0 and accessing prefix[-1]
      • Incorrect initialization of prefix[0]
      5. Given an array arr of size n, how can you use a prefix sum array to efficiently find the sum of elements between indices l and r (inclusive)?
      hard
      A. Sum = prefix[r] / prefix[l-1] if l > 0, else prefix[r]
      B. Sum = prefix[r] + prefix[l-1] if l > 0, else prefix[r]
      C. Sum = prefix[r] * prefix[l-1] if l > 0, else prefix[r]
      D. Sum = prefix[r] - prefix[l-1] if l > 0, else prefix[r]

      Solution

      1. Step 1: Understand prefix sum usage for range queries

        Prefix sum at index r gives sum from 0 to r. To get sum from l to r, subtract sum from 0 to l-1, which is prefix[l-1]. If l is 0, sum is prefix[r].
      2. Step 2: Apply formula for sum between l and r

        Sum = prefix[r] - prefix[l-1] if l > 0, else prefix[r]. Other operations like addition, multiplication, or division are incorrect.
      3. Final Answer:

        Sum = prefix[r] - prefix[l-1] if l > 0, else prefix[r] -> Option D
      4. Quick Check:

        Range sum = prefix[r] - prefix[l-1] [OK]
      Hint: Subtract prefix before l from prefix at r for range sum [OK]
      Common Mistakes:
      • Adding prefix[l-1] instead of subtracting
      • Using multiplication or division incorrectly
      • Not handling case when l = 0
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard