Open In App

Prefix Sum Array – Implementation and Applications

Last Updated : 11 Apr, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

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

Examples: 

Input: arr[] = [10, 20, 10, 5, 15]
Output: 10 30 40 45 60
Explanation: For each index i, add all the elements from 0 to i:
prefixSum[0] = 10, 
prefixSum[1] = 10 + 20 = 30, 
prefixSum[2] = 10 + 20 + 10 = 40 and so on.

Input: arr[] = [30, 10, 10, 5, 50]
Output: 30 40 50 55 105
Explanation: For each index i, add all the elements from 0 to i:
prefixSum[0] = 30, 
prefixSum[1] = 30 + 10 = 40,
prefixSum[2] = 30 + 10+ 10 = 50 and so on.

Prefix Sum Implementation

The idea is to create an array prefixSum[] of size n, and for each index i in range 1 to n – 1, set prefixSum[i] = prefixSum[i – 1] + arr[i].

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++
#include<bits/stdc++.h>usingnamespacestd;// function to find the prefix sum arrayvector<int>findPrefixSum(vector<int>&arr){intn=arr.size();// to store the prefix sumvector<int>prefixSum(n);// initialize the first elementprefixSum[0]=arr[0];// Adding present element with previous elementfor(inti=1;i<n;i++)prefixSum[i]=prefixSum[i-1]+arr[i];returnprefixSum;}intmain(){vector<int>arr={10,20,10,5,15};vector<int>prefixSum=findPrefixSum(arr);for(autoi:prefixSum){cout<<i<<" ";}return0;}
Java
// Function to find the prefix sum arrayimportjava.util.*;classGfG{// Function to find the prefix sum arraystaticArrayList<Integer>findPrefixSum(int[]arr){intn=arr.length;// to store the prefix sumArrayList<Integer>prefixSum=newArrayList<>(n);for(inti=0;i<n;i++){prefixSum.add(0);}// initialize the first elementprefixSum.set(0,arr[0]);// Adding present element with previous elementfor(inti=1;i<n;i++)prefixSum.set(i,prefixSum.get(i-1)+arr[i]);returnprefixSum;}publicstaticvoidmain(String[]args){int[]arr={10,20,10,5,15};ArrayList<Integer>prefixSum=findPrefixSum(arr);for(inti:prefixSum){System.out.print(i+" ");}}}
Python
# Function to find the prefix sum arraydeffindPrefixSum(arr):n=len(arr)# to store the prefix sumprefixSum=[0]*n# initialize the first elementprefixSum[0]=arr[0]# Adding present element with previous elementforiinrange(1,n):prefixSum[i]=prefixSum[i-1]+arr[i]returnprefixSumif__name__=="__main__":arr=[10,20,10,5,15]prefixSum=findPrefixSum(arr)foriinprefixSum:print(i,end=" ")
C#
// Function to find the prefix sum arrayusingSystem;usingSystem.Collections.Generic;classGfG{// Function to find the prefix sum arraystaticList<int>findPrefixSum(int[]arr){intn=arr.Length;// to store the prefix sumList<int>prefixSum=newList<int>(newint[n]);// initialize the first elementprefixSum[0]=arr[0];// Adding present element with previous elementfor(inti=1;i<n;i++)prefixSum[i]=prefixSum[i-1]+arr[i];returnprefixSum;}staticvoidMain(){int[]arr={10,20,10,5,15};List<int>prefixSum=findPrefixSum(arr);foreach(intiinprefixSum){Console.Write(i+" ");}}}
JavaScript
// Function to find the prefix sum arrayfunctionfindPrefixSum(arr){letn=arr.length;// to store the prefix sumletprefixSum=newArray(n).fill(0);// initialize the first elementprefixSum[0]=arr[0];// Adding present element with previous elementfor(leti=1;i<n;i++)prefixSum[i]=prefixSum[i-1]+arr[i];returnprefixSum;}letarr=[10,20,10,5,15];letprefixSum=findPrefixSum(arr);for(letiofprefixSum){process.stdout.write(i+" ");}

Output
10 30 40 45 60 

Time Complexity: O(n), as we are traversing the array only once.
Auxiliary Space: O(n), to create the array prefxSum[] of size n.

Example Problems based on Prefix Sum

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

Given an array arr[] of size n. Given q queries and in each query given i and j, Print the sum of array elements from index i to j.

Input : arr[] = {1, 2, 3, 4, 5}
i = 1, j = 3
i = 2, j = 4
Output : 9
12
Input : arr[] = {1, 2, 3, 4, 5}
i = 0, j = 4
i = 1, j = 2
Output : 15
5

Please refer Range sum queries without updates for Naive and Prefix Sum based solutions.

2. Maximum value in an array after m range increment operations:

Consider an array of size n with all initial values as 0. We need to perform the following m range increment operations.

increment(a, b, k) : Increment values from ‘a’ to ‘b’ by ‘k’.

After m operations, we need to calculate the maximum of the values in the array.

Examples :

Input : n = 5 m = 3 
           a = 0, b = 1, k = 100 
           a = 1, b = 4, k = 100
           a = 2, b = 3, k = 100
Output : 200
Explanation:
Initially array = {0, 0, 0, 0, 0}
After first operation: {100, 100, 0, 0, 0}
After second operation: {100, 200, 100, 100, 100}
After third operation {100, 200, 200, 200, 100}
Maximum element after m operations is 200.

Input : n = 4 m = 3 
            a = 1, b = 2, k = 603
            a = 0, b = 0, k = 286
            a = 3, b = 3, k = 882
Output : 882
Explanation:
Initially array = {0, 0, 0, 0}
After first operation: {0, 603, 603, 0}
After second operation: {286, 603, 603, 0}
After third operation: {286, 603, 603, 882}
Maximum element after m operations is 882.

Please refer Maximum after m range increment operationsfor details and implementation

Applications of Prefix Sum: 



Next Article

Similar Reads

close