Skip to content
Related Articles

Related Articles

Suffix Sum Array

Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 29 Mar, 2022
Improve Article
Save Article

Suffix Sum ArrayGiven an array arr[] of size N, the task is to compute and return its suffix sum array

Suffix Sum is a precomputation technique in which the sum of all the elements of the original array from an index i till the end of the array is computed.

Therefore, this suffix sum array will be created using the relation: 

suffixSum[i] = arr[i] + arr[i+1] + arr[i+2] … +arr[n-1]

Examples:

Input: arr[] = { 15, 10, 25, 5, 10, 20 } , N = 6
Output: suffixSum[] = { 85, 70, 60, 35, 30, 20}
Explanation: While traversing the array from back, keep adding element from the back with element at current index.
suffixSum[5] = 20,  
suffixSum[4] =suffixSum[5] + arr[4] = 20+10 = 30 ,  
suffixSum[3] = suffixSum[4] + arr[3] = 30+5 = 35 and so on.

Input: arr[] = {10, 14, 16, 20}, n = 6
Output: suffixSum[] = {60, 50, 36, 20}
Explanation: suffixSum[3] = 20,  
suffixSum[2] =suffixSum[3] + arr[2] = 20+16 = 36 ,  
suffixSum[1] = suffixSum[2] + arr[1] = 36+14 = 40 and so on.

 

Approach: To fill the suffix sum array, we run through index N-1 to 0 and keep on adding the current element with the previous value in the suffix sum array.

  • Create an array of size N to store the suffix sum.
  • Initialize the last element of the suffix sum array with the last element of the original array
    suffixSum[n-1] = arr[n-1]
  • Traverse the original array from N-2 to 0
    • For each index i find the suffix sum and store it at suffixSum[i]
    • suffixSum[i] = suffixSum[i + 1] + arr[i]
  • Return the computed suffix sum array.

Below is the implementation of the above approach to create a suffix sum array:

C++




// C++ program for Implementing
// suffix sum array
#include <bits/stdc++.h>
using namespace std;
 
// Function to create suffix sum array
vector<int> createSuffixSum(vector<int> arr, int n)
{
    // Create an array to store the suffix sum
    vector<int> suffixSum(n, 0);
 
    // Initialize the last element of
    // suffix sum array with last element
    // of original array
    suffixSum[n - 1] = arr[n - 1];
 
    // Traverse the array from n-2 to 0
    for (int i = n - 2; i >= 0; i--)
 
        // Adding current element
        // with previous element from back
        suffixSum[i] = suffixSum[i + 1] + arr[i];
 
    // Return the computed suffixSum array
    return suffixSum;
}
 
// Driver Code
int main()
{
    vector<int> arr = { 10, 14, 16, 20 };
    int N = arr.size();
 
    // Function call to fill suffix sum array
    vector<int> suffixSum = createSuffixSum(arr, N);
 
    // Printing the computed suffix sum array
    cout << "Suffix sum array: ";
    for (int i = 0; i < N; i++)
        cout << suffixSum[i] << " ";
}


Java




// Java program for Implementing
// suffix sum array
import java.util.*;
public class GFG {
 
  // Function to create suffix sum array
  static int[] createSuffixSum(int[] arr, int n)
  {
 
    // Create an array to store the suffix sum
    int[] suffixSum = new int[n];
 
    for (int i = 0; i < n; i++) {
      suffixSum[i] = 0;
    }
 
    // Initialize the last element of
    // suffix sum array with last element
    // of original array
    suffixSum[n - 1] = arr[n - 1];
 
    // Traverse the array from n-2 to 0
    for (int i = n - 2; i >= 0; i--)
 
      // Adding current element
      // with previous element from back
      suffixSum[i] = suffixSum[i + 1] + arr[i];
 
    // Return the computed suffixSum array
    return suffixSum;
  }
 
  // Driver Code
  public static void main(String args[])
  {
    int[] arr = { 10, 14, 16, 20 };
    int N = arr.length;
 
    // Function call to fill suffix sum array
    int[] suffixSum = createSuffixSum(arr, N);
 
    // Printing the computed suffix sum array
    System.out.print("Suffix sum array: ");
    for (int i = 0; i < N; i++)
      System.out.print(suffixSum[i] + " ");
  }
}
 
// This code is contributed by Samim Hossain Mondal.


Python3




# python3 program for Implementing
# suffix sum array
 
# Function to create suffix sum array
def createSuffixSum(arr, n):
 
    # Create an array to store the suffix sum
    suffixSum = [0 for _ in range(n)]
 
    # Initialize the last element of
    # suffix sum array with last element
    # of original array
    suffixSum[n - 1] = arr[n - 1]
 
    # Traverse the array from n-2 to 0
    for i in range(n-2, -1, -1):
 
        # Adding current element
        # with previous element from back
        suffixSum[i] = suffixSum[i + 1] + arr[i]
 
    # Return the computed suffixSum array
    return suffixSum
 
# Driver Code
if __name__ == "__main__":
 
    arr = [10, 14, 16, 20]
    N = len(arr)
 
    # Function call to fill suffix sum array
    suffixSum = createSuffixSum(arr, N)
 
    # Printing the computed suffix sum array
    print("Suffix sum array: ", end="")
    for i in range(0, N):
        print(suffixSum[i], end=" ")
 
    # This code is contributed by rakeshsahni


C#




// C# program for Implementing
// suffix sum array
using System;
class GFG {
 
  // Function to create suffix sum array
  static int[] createSuffixSum(int[] arr, int n)
  {
 
    // Create an array to store the suffix sum
    int[] suffixSum = new int[n];
 
    for (int i = 0; i < n; i++) {
      suffixSum[i] = 0;
    }
 
    // Initialize the last element of
    // suffix sum array with last element
    // of original array
    suffixSum[n - 1] = arr[n - 1];
 
    // Traverse the array from n-2 to 0
    for (int i = n - 2; i >= 0; i--)
 
      // Adding current element
      // with previous element from back
      suffixSum[i] = suffixSum[i + 1] + arr[i];
 
    // Return the computed suffixSum array
    return suffixSum;
  }
 
  // Driver Code
  public static void Main()
  {
    int[] arr = { 10, 14, 16, 20 };
    int N = arr.Length;
 
    // Function call to fill suffix sum array
    int[] suffixSum = createSuffixSum(arr, N);
 
    // Printing the computed suffix sum array
    Console.Write("Suffix sum array: ");
    for (int i = 0; i < N; i++)
      Console.Write(suffixSum[i] + " ");
  }
}
 
// This code is contributed by Samim Hossain Mondal.


Javascript




<script>
      // JavaScript code for the above approach
 
      // Function to create suffix sum array
      function createSuffixSum(arr, n)
      {
       
          // Create an array to store the suffix sum
          let suffixSum = new Array(n).fill(0);
 
          // Initialize the last element of
          // suffix sum array with last element
          // of original array
          suffixSum[n - 1] = arr[n - 1];
 
          // Traverse the array from n-2 to 0
          for (let i = n - 2; i >= 0; i--)
 
              // Adding current element
              // with previous element from back
              suffixSum[i] = suffixSum[i + 1] + arr[i];
 
          // Return the computed suffixSum array
          return suffixSum;
      }
 
      // Driver Code
      let arr = [10, 14, 16, 20];
      let N = arr.length;
 
      // Function call to fill suffix sum array
      let suffixSum = createSuffixSum(arr, N);
 
      // Printing the computed suffix sum array
      document.write("Suffix sum array: ")
      for (let i = 0; i < N; i++)
          document.write(suffixSum[i] + " ");
 
     // This code is contributed by Potta Lokesh
  </script>


 
 

Output

Suffix sum array: 60 50 36 20 

Time Complexity: O(N), to traverse the original array for computing suffix sum.
Auxiliary Space: O(N), to store the suffix sum array.


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!