Applications of Prefix Sum

Related Articles:



Prefix Sum Array – Implementation and Applications in Competitive Programming

Given an array arr[] of size N, find the prefix sum of the array. A prefix sum array is another array prefixSum[] of the same size, such that the value of prefixSum[i] is arr[0] + arr[1] + arr[2] . . . arr[i].

Examples: 

Input: arr[] = {10, 20, 10, 5, 15}
Output: prefixSum[] = {10, 30, 40, 45, 60}
Explanation: While traversing the array, update the element by adding it with its previous element.
prefixSum[0] = 10, 
prefixSum[1] = prefixSum[0] + arr[1] = 30, 
prefixSum[2] = prefixSum[1] + arr[2] = 40 and so on.

Recommended Practice

Approach: To solve the problem follow the given steps:

  • Declare a new array prefixSum[] of the same size as the input array
  • Run a for loop to traverse the input array
  • For each index add the value of the current element and the previous value of the prefix sum array

Below is the implementation of the above approach:

C++




// C++ program for Implementing prefix sum array
#include <bits/stdc++.h>
using namespace std;
 
// Fills prefix sum array
void fillPrefixSum(int arr[], int n, int prefixSum[])
{
    prefixSum[0] = arr[0];
    // Adding present element with previous element
    for (int i = 1; i < n; i++)
        prefixSum[i] = prefixSum[i - 1] + arr[i];
}
 
// Driver Code
int main()
{
    int arr[] = { 10, 4, 16, 20 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int prefixSum[n];
   
      // Function call
    fillPrefixSum(arr, n, prefixSum);
    for (int i = 0; i < n; i++)
        cout << prefixSum[i] << " ";
}
 
// This code is contributed by Aditya Kumar (adityakumar129)


C




// C program for Implementing prefix sum array
#include <stdio.h>
 
// Fills prefix sum array
void fillPrefixSum(int arr[], int n, int prefixSum[])
{
    prefixSum[0] = arr[0];
 
    // Adding present element with previous element
    for (int i = 1; i < n; i++)
        prefixSum[i] = prefixSum[i - 1] + arr[i];
}
 
// Driver Code
int main()
{
    int arr[] = { 10, 4, 16, 20 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int prefixSum[n];
   
      // Function call
    fillPrefixSum(arr, n, prefixSum);
    for (int i = 0; i < n; i++)
          printf("%d ", prefixSum[i]);
}
 
// This code is contributed by Aditya Kumar (adityakumar129)


Java




// Java Program for Implementing prefix sum arrayclass
 
import java.io.*;
 
class Prefix {
    // Fills prefix sum array
    static void fillPrefixSum(int arr[], int n,
                              int prefixSum[])
    {
        prefixSum[0] = arr[0];
        // Adding present element with previous element
        for (int i = 1; i < n; ++i)
            prefixSum[i] = prefixSum[i - 1] + arr[i];
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = { 10, 4, 16, 20 };
        int n = arr.length;
        int prefixSum[] = new int[n];
       
          // Function call
        fillPrefixSum(arr, n, prefixSum);
        for (int i = 0; i < n; i++)
            System.out.print(prefixSum[i] + " ");
        System.out.println("");
    }
}
 
// This code is contributed by Aditya Kumar (adityakumar129)


Python3




# Python3 Program for Implementing
# prefix sum array
 
# Fills prefix sum array
 
 
def fillPrefixSum(arr, n, prefixSum):
 
    prefixSum[0] = arr[0]
 
    # Adding present element
    # with previous element
    for i in range(1, n):
        prefixSum[i] = prefixSum[i - 1] + arr[i]
 
 
# Driver code
if __name__ == '__main__':
  arr = [10, 4, 16, 20]
  n = len(arr)
 
  # Function call
  prefixSum = [0 for i in range(n + 1)]
 
  fillPrefixSum(arr, n, prefixSum)
 
  for i in range(n):
      print(prefixSum[i], " ", end="")
 
# This code is contributed
# by Anant Agarwal.


C#




// C# Program for Implementing
// prefix sum arrayclass
using System;
 
class GFG {
    // Fills prefix sum array
    static void fillPrefixSum(int[] arr, int n,
                              int[] prefixSum)
    {
        prefixSum[0] = arr[0];
 
        // Adding present element
        // with previous element
        for (int i = 1; i < n; ++i)
            prefixSum[i] = prefixSum[i - 1] + arr[i];
    }
 
    // Driver code
    public static void Main()
    {
        int[] arr = { 10, 4, 16, 20 };
        int n = arr.Length;
        int[] prefixSum = new int[n];
 
          // Function call
        fillPrefixSum(arr, n, prefixSum);
 
        for (int i = 0; i < n; i++)
            Console.Write(prefixSum[i] + " ");
        Console.Write("");
    }
}
 
// This Code is Contributed by nitin mittal


Javascript




<script>
 
    // JavaScript Program for Implementing
    // prefix sum arrayclass
     
    // Fills prefix sum array
    function fillPrefixSum(arr, n, prefixSum)
    {
        prefixSum[0] = arr[0];
  
        // Adding present element
        // with previous element
        for (let i = 1; i < n; ++i)
            prefixSum[i] = prefixSum[i - 1] + arr[i];
    }
     
    let arr = [ 10, 4, 16, 20 ];
    let n = arr.length;
    let prefixSum = new Array(n);
 
    fillPrefixSum(arr, n, prefixSum);
 
    for (let i = 0; i < n; i++)
        document.write(prefixSum[i] + " ");
    document.write("");
     
</script>


PHP




<?php
// PHP program for
// Implementing prefix
// sum array
 
// Fills prefix sum array
function fillPrefixSum($arr,
                       $n)
{
    $prefixSum = array();
    $prefixSum[0] = $arr[0];
 
    // Adding present element
    // with previous element
    for ($i = 1; $i < $n; $i++)
        $prefixSum[$i] = $prefixSum[$i - 1] +
                                    $arr[$i];
         
    for ($i = 0; $i < $n; $i++)
        echo $prefixSum[$i] . " ";
}
 
// Driver Code
$arr = array(10, 4, 16, 20);
$n = count($arr);
 
// Function call
fillPrefixSum($arr, $n);
 
// This code is contributed
// by Sam007
?>


Output

10 14 30 50 

Time Complexity: O(N)
Auxiliary Space: O(N)

Similar Reads

Sum of an array between indexes L and R using Prefix Sum:

...

Example Problem:

...

Applications of Prefix Sum:

...