Related Articles
Sum of all Subarrays | Set 1
• Difficulty Level : Medium
• Last Updated : 04 Mar, 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``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

## 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.`

## Python 3

 `# 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

 ``

## Javascript

 ``

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``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

## 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

## Python 3

 `#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

 ``

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.