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++
#include<bits/stdc++.h>
using namespace std;
long int SubArraySum( int arr[], int n)
{
long int result = 0,temp=0;
for ( int i=0; i <n; i++)
{
temp=0;
for ( int j=i; j<n; j++)
{
temp+=arr[j];
result += temp ;
}
}
return result ;
}
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
class GFG {
public static long SubArraySum( int arr[], int n)
{
long result = 0 ,temp= 0 ;
for ( int i = 0 ; i < n; i ++)
{
temp= 0 ;
for ( int j = i; j < n; j ++)
{
temp+=arr[j];
result += temp ;
}
}
return result ;
}
public static void main(String[] args)
{
int arr[] = { 1 , 2 , 3 } ;
int n = arr.length;
System.out.println( "Sum of SubArray : " +
SubArraySum(arr, n));
}
}
|
Python 3
def SubArraySum(arr, n):
temp,result = 0 , 0
for i in range ( 0 , n):
temp = 0 ;
for j in range (i, n):
temp + = arr[j]
result + = temp
return result
arr = [ 1 , 2 , 3 ]
n = len (arr)
print ( "Sum of SubArray :"
,SubArraySum(arr, n))
|
C#
using System;
class GFG {
public static long SubArraySum( int []arr,
int n)
{
long result = 0,temp=0;
for ( int i = 0; i < n; i ++)
{
temp=0;
for ( int j = i; j < n; j ++)
{
temp+=arr[j];
result += temp ;
}
}
return result ;
}
public static void Main()
{
int []arr = {1, 2, 3} ;
int n = arr.Length;
Console.Write( "Sum of SubArray : " +
SubArraySum(arr, n));
}
}
|
PHP
<?php
function SubArraySum( $arr , $n )
{
$result = 0;
$temp =0;
for ( $i = 0; $i < $n ; $i ++)
{
$temp =0;
for ( $j = $i ; $j < $n ; $j ++)
{
$temp += $arr [ $j ]
$result += $temp ;
}
}
return $result ;
}
$arr = array (1, 2, 3) ;
$n = sizeof( $arr );
echo "Sum of SubArray : " ,
SubArraySum( $arr , $n ), "\n" ;
?>
|
Javascript
<script>
function SubArraySum(arr, n)
{
let result = 0,temp=0;
for (let i=0; i <n; i++)
{
temp=0;
for (let j=i; j<n; j++)
{
temp+=arr[j];
result += temp ;
}
}
return result ;
}
let arr = [1, 2, 3] ;
let n = arr.length;
document.write( "Sum of SubArray : "
+ SubArraySum(arr, n) + "<br>" );
</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++
#include<bits/stdc++.h>
using namespace std;
long int SubArraySum( int arr[] , int n )
{
long int result = 0;
for ( int i=0; i<n; i++)
result += (arr[i] * (i+1) * (n-i));
return result ;
}
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
class GFG {
public static long SubArraySum( int arr[] , int n )
{
long result = 0 ;
for ( int i= 0 ; i<n; i++)
result += (arr[i] * (i+ 1 ) * (n-i));
return result ;
}
public static void main(String[] args)
{
int arr[] = { 1 , 2 , 3 } ;
int n = arr.length;
System.out.println( "Sum of SubArray " +
SubArraySum(arr, n));
}
}
|
Python 3
def SubArraySum(arr, n ):
result = 0
for i in range ( 0 , n):
result + = (arr[i] * (i + 1 ) * (n - i))
return result
arr = [ 1 , 2 , 3 ]
n = len (arr)
print ( "Sum of SubArray : " ,
SubArraySum(arr, n))
|
C#
using System;
class GFG
{
public static long SubArraySum( int []arr ,
int n )
{
long result = 0;
for ( int i = 0; i < n; i++)
result += (arr[i] *
(i + 1) * (n - i));
return result ;
}
static public void Main ()
{
int []arr = {1, 2, 3} ;
int n = arr.Length;
Console.WriteLine( "Sum of SubArray: " +
SubArraySum(arr, n));
}
}
|
PHP
<?php
function SubArraySum( $arr , $n )
{
$result = 0;
for ( $i = 0; $i < $n ; $i ++)
$result += ( $arr [ $i ] *
( $i + 1) *
( $n - $i ));
return $result ;
}
$arr = array (1, 2, 3) ;
$n = sizeof( $arr );
echo "Sum of SubArray : " ,
SubArraySum( $arr , $n ) , "\n" ;
#This code is contributed by aj_36
?>
|
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 contribute.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.