Skip to content
Related Articles

Related Articles

Improve Article

Sum of all Subarrays | Set 1

  • Difficulty Level : Medium
  • Last Updated : 28 Apr, 2021

Given an integer array ‘arr[]’ of size n, find sum of all sub-arrays of given array. 

Examples : 

Input   : arr[] = {1, 2, 3}
Output  : 20
Explanation : {1} + {2} + {3} + {2 + 3} + 
              {1 + 2} + {1 + 2 + 3} = 20

Input  : arr[] = {1, 2, 3, 4}
Output : 50

Method 1 (Simple Solution) 
A simple solution is to generate all sub-array and compute their sum.

Below is the implementation of above idea.  

C++




// Simple C++ program to compute sum of
// subarray elements
#include<bits/stdc++.h>
using namespace std;
 
// Computes sum all sub-array
long int SubArraySum(int arr[], int n)
{
    long int result = 0,temp=0;
 
    // Pick starting point
    for (int i=0; i <n; i++)
    {
        // Pick ending point
        temp=0;
        for (int j=i; j<n; j++)
        {
            // sum subarray between current
            // starting and ending points
            temp+=arr[j];
            result += temp ;
        }
    }
    return result ;
}
 
// driver program to test above function
int main()
{
    int arr[] = {1, 2, 3} ;
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << "Sum of SubArray : "
          << SubArraySum(arr, n) << endl;
    return 0;
}


Java




// Simple Java program to compute sum of
// subarray elements
class GFG {
     
    // Computes sum all sub-array
    public static long SubArraySum(int arr[], int n)
    {
        long result = 0,temp=0;
      
        // Pick starting point
        for (int i = 0; i < n; i ++)
        {
            // Pick ending point
            temp=0;
            for (int j = i; j < n; j ++)
            {
                // sum subarray between current
                // starting and ending points
                temp+=arr[j];
                result += temp ;
            }
        }
        return result ;
    }
     
    /* Driver program to test above function */
    public static void main(String[] args)
    {
        int arr[] = {1, 2, 3} ;
        int n = arr.length;
        System.out.println("Sum of SubArray : " +
                          SubArraySum(arr, n));
    }
}
// This code is contributed by Arnav Kr. Mandal.


Python3




# Python3 program to compute
# sum of subarray elements
 
# Computes sum all sub-array
def SubArraySum(arr, n):
    temp,result = 0,0
 
    # Pick starting point
    for i in range(0, n):
 
        # Pick ending point
        temp=0;
        for j in range(i, n):
 
            # sum subarray between
            # current starting and
            # ending points
            temp+=arr[j]
            result += temp
    return result
 
# driver program
arr = [1, 2, 3]
n = len(arr)
print ("Sum of SubArray :"
       ,SubArraySum(arr, n))
 
# This code is contributed by
# TheGameOf256.


C#




// Simple C# program to compute sum of
// subarray elements
using System;
 
class GFG {
     
    // Computes sum all sub-array
    public static long SubArraySum(int []arr,
                                      int n)
    {
        long result = 0,temp=0;
     
        // Pick starting point
        for (int i = 0; i < n; i ++)
        {
            // Pick ending point
            temp=0;
            for (int j = i; j < n; j ++)
            {
                 
                // sum subarray between current
                // starting and ending points
                temp+=arr[j];
                result += temp ;
            }
        }
        return result ;
    }
     
    // Driver Code
    public static void Main()
    {
        int []arr = {1, 2, 3} ;
        int n = arr.Length;
        Console.Write("Sum of SubArray : " +
                        SubArraySum(arr, n));
    }
}
 
// This code is contributed by nitin mittal


PHP




<?php
// Simple PHP program to
// compute sum of subarray
// elements Computes sum
// all sub-array
 
function SubArraySum($arr, $n)
{
    $result = 0;
    $temp=0;
    // Pick starting point
    for ($i = 0; $i < $n; $i++)
    {
        // Pick ending point
        $temp=0;
        for ($j = $i; $j < $n; $j++)
        {
            // sum subarray between
            // current starting and
            // ending points
            $temp+=$arr[$j]
            $result += $temp ;
        }
    }
    return $result ;
}
 
// Driver Code
$arr = array(1, 2, 3) ;
$n = sizeof($arr);
echo "Sum of SubArray : ",
    SubArraySum($arr, $n),"\n";
     
// This code is contributed by ajit
?>


Javascript




<script>
 
// Simple Javascript program to compute sum of
// subarray elements
 
// Computes sum all sub-array
function SubArraySum(arr, n)
{
    let result = 0,temp=0;
 
    // Pick starting point
    for (let i=0; i <n; i++)
    {
        // Pick ending point
        temp=0;
        for (let j=i; j<n; j++)
        {
            // sum subarray between current
            // starting and ending points
            temp+=arr[j];
            result += temp ;
        }
    }
    return result ;
}
 
// driver program to test above function
  
    let arr = [1, 2, 3] ;
    let n = arr.length;
    document.write("Sum of SubArray : "
    + SubArraySum(arr, n) + "<br>");
     
// This code is contributed by Mayank Tyagi
 
</script>


Output: 



Sum of SubArray : 20

Time Complexity : O(n2

Method 2 (efficient solution) 
If we take a close look then we observe a pattern. Let take an example  

arr[] = [1, 2, 3], n = 3
All subarrays :  [1], [1, 2], [1, 2, 3], 
                 [2], [2, 3], [3]
here first element 'arr[0]' appears 3 times    
     second element 'arr[1]' appears 4 times  
     third element 'arr[2]' appears 3 times

Every element arr[i] appears in two types of subsets:
i)  In subarrays beginning with arr[i]. There are 
    (n-i) such subsets. For example [2] appears
    in [2] and [2, 3].
ii) In (n-i)*i subarrays where this element is not
    first element. For example [2] appears in 
    [1, 2] and [1, 2, 3].

Total of above (i) and (ii) = (n-i) + (n-i)*i 
                            = (n-i)(i+1)
                                  
For arr[] = {1, 2, 3}, sum of subarrays is:
  arr[0] * ( 0 + 1 ) * ( 3 - 0 ) + 
  arr[1] * ( 1 + 1 ) * ( 3 - 1 ) +
  arr[2] * ( 2 + 1 ) * ( 3 - 2 ) 

= 1*3 + 2*4 + 3*3 
= 20

Below is the implementation of above idea. 

C++




// Efficient C++ program to compute sum of
// subarray elements
#include<bits/stdc++.h>
using namespace std;
 
//function compute sum all sub-array
long int SubArraySum( int arr[] , int n )
{
    long int result = 0;
 
    // computing sum of subarray using formula
    for (int i=0; i<n; i++)
        result += (arr[i] * (i+1) * (n-i));
 
    // return all subarray sum
    return result ;
}
 
// driver program to test above function
int main()
{
    int arr[] = {1, 2, 3} ;
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << "Sum of SubArray : "
         << SubArraySum(arr, n) << endl;
    return 0;
}


Java




// Efficient Java program to compute sum of
// subarray elements
class GFG {
     
    //function compute sum all sub-array
    public static long SubArraySum( int arr[] , int n )
    {
        long result = 0;
      
        // computing sum of subarray using formula
        for (int i=0; i<n; i++)
            result += (arr[i] * (i+1) * (n-i));
      
        // return all subarray sum
        return result ;
    }
     
    /* Driver program to test above function */
    public static void main(String[] args)
    {
        int arr[] = {1, 2, 3} ;
        int n = arr.length;
        System.out.println("Sum of SubArray " +
                           SubArraySum(arr, n));
    }
}
// This code is contributed by Arnav Kr. Mandal.


Python3




#Python3 code to compute
# sum of subarray elements
 
#function compute sum
# all sub-array
def SubArraySum(arr, n ):
    result = 0
 
    # computing sum of subarray
    # using formula
    for i in range(0, n):
        result += (arr[i] * (i+1) * (n-i))
 
    # return all subarray sum
    return result
 
# driver program
arr = [1, 2, 3]
n = len(arr)
print ("Sum of SubArray : ",
      SubArraySum(arr, n))
 
# This code is contributed by
# TheGameOf256.


C#




// Efficient C# program
// to compute sum of
// subarray elements
using System;
 
class GFG
{
         
    // function compute
    // sum all sub-array
    public static long SubArraySum(int []arr ,
                                   int n )
    {
        long result = 0;
     
        // computing sum of
        // subarray using formula
        for (int i = 0; i < n; i++)
            result += (arr[i] *
                      (i + 1) * (n - i));
     
        // return all subarray sum
        return result ;
    }
     
    // Driver code
    static public void Main ()
    {
        int []arr = {1, 2, 3} ;
        int n = arr.Length;
        Console.WriteLine("Sum of SubArray: " +
                          SubArraySum(arr, n));
    }
}
 
// This code is contributed by akt_mit


PHP




<?php
// Efficient PHP program to compute
// sum of subarray elements
 
//function compute sum all sub-array
function SubArraySum($arr , $n)
{
    $result = 0;
 
    // computing sum of subarray
    // using formula
    for ($i = 0; $i < $n; $i++)
        $result += ($arr[$i] *
                    ($i + 1) *
                    ($n - $i));
 
    // return all subarray sum
    return $result ;
}
 
// Driver Code
$arr = array(1, 2, 3) ;
$n = sizeof($arr);
echo "Sum of SubArray : ",
      SubArraySum($arr, $n) ,"\n";
 
 
#This code is contributed by aj_36
?>


Javascript




<script>
 
// Efficient Javascript program
// to compute sum of subarray elements
 
// Function compute
// sum all sub-array
function SubArraySum(arr, n)
{
    let result = 0;
  
    // Computing sum of
    // subarray using formula
    for(let i = 0; i < n; i++)
        result += (arr[i] * (i + 1) *
                            (n - i));
  
    // Return all subarray sum
    return result ;
}
 
// Driver code
let arr = [ 1, 2, 3 ];
let n = arr.length;
 
document.write("Sum of SubArray : " +
               SubArraySum(arr, n));
                
// This code is contributed by divyesh072019
 
</script>


Output : 

Sum of SubArray : 20

Time complexity : O(n)
Reference : 
https://www.quora.com/Can-we-find-the-sum-of-all-sub-arrays-of-an-integer-array-in-O-n-time
Sum of all subsequences of an array
This article is contributed by Nishant Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :