# Find array elements equal to sum of any subarray of at least size 2

• Difficulty Level : Medium
• Last Updated : 24 May, 2021

Given an array arr[], the task is to find the elements from the array which are equal to the sum of any sub-array of size greater than 1.
Examples:

Input: arr[] = {1, 2, 3, 4, 5, 6}
Output: 3, 5, 6
Explanation:
The elements 3, 5, 6 are equal to sum of subarrays {1, 2},{2, 3} and {1, 2, 3} respectively.
Input: arr[] = {5, 6, 10, 1, 3, 4, 8, 16}
Output: 4, 8, 16
Explanation:
The elements 4, 8, 16 are equal to the sum of subarrays {1, 3}, {1, 3, 4}, {1, 3, 4, 8} respectively

Approach: The idea is to use a prefix sum array to solve the given problem. Create a prefix[] array that stores the prefix sum of all its preceding elements for every index. Store the sum of all subarrays in a map and search if any array element is present in the map or not.
Below is the implementation of the above approach:

## C++

 `// C++ implementation to find array``// elements equal to the sum``// of any subarray of at least size 2` `#include ``using` `namespace` `std;` `// Function to find all elements``void` `findElements(``int``* arr, ``int` `n)``{``    ``if` `(n == 1)``        ``return``;` `    ``int` `pre[n];` `    ``// Create a prefix array``    ``pre[0] = arr[0];` `    ``for` `(``int` `i = 1; i < n; i++)``        ``pre[i] = arr[i] + pre[i - 1];` `    ``unordered_map<``int``, ``bool``> mp;` `    ``// Mark the sum of all sub arrays as true``    ``for` `(``int` `i = 1; i < n - 1; i++) {``        ``mp[pre[i]] = ``true``;` `        ``for` `(``int` `j = i + 1; j < n; j++) {``            ``mp[pre[j] - pre[i - 1]] = ``true``;``        ``}``    ``}` `    ``// Check all elements``    ``// which are marked``    ``// true in the map``    ``for` `(``int` `i = 0; i < n; i++) {``        ``if` `(mp[arr[i]]) {``            ``cout << arr[i] << ``" "``;``        ``}``    ``}``    ``cout << endl;``}` `// Driver Code``int` `main()``{``    ``int` `arr1[] = { 1, 2, 3, 4, 5, 6 };` `    ``int` `n1 = ``sizeof``(arr1) / ``sizeof``(arr1[0]);` `    ``findElements(arr1, n1);` `    ``return` `0;``}`

## Java

 `// Java implementation to find array``// elements equal to the sum of any``// subarray of at least size 2``import` `java.util.*;` `class` `GFG{``    ` `// Function to find all elements``static` `void` `findElements(``int``[] arr, ``int` `n)``{``    ``if` `(n == ``1``)``        ``return``;` `    ``int` `pre[] = ``new` `int``[n];` `    ``// Create a prefix array``    ``pre[``0``] = arr[``0``];` `    ``for``(``int` `i = ``1``; i < n; i++)``        ``pre[i] = arr[i] + pre[i - ``1``];` `    ``HashMap mp = ``new` `HashMap<>();` `    ``// Mark the sum of all sub arrays as true``    ``for``(``int` `i = ``1``; i < n - ``1``; i++)``    ``{``        ``mp.put(pre[i], ``true``);` `        ``for``(``int` `j = i + ``1``; j < n; j++)``        ``{``            ``mp.put(pre[j] - pre[i - ``1``], ``true``);``        ``}``    ``}` `    ``// Check all elements``    ``// which are marked``    ``// true in the map``    ``for``(``int` `i = ``0``; i < n; i++)``    ``{``        ``if` `(mp.get(arr[i]) != ``null``)``        ``{``            ``System.out.print(arr[i] + ``" "``);``        ``}``    ``}``    ``System.out.println();``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``int` `arr1[] = { ``1``, ``2``, ``3``, ``4``, ``5``, ``6` `};` `    ``int` `n1 = arr1.length;` `    ``findElements(arr1, n1);``}``}` `// This code is contributed by jrishabh99`

## Python3

 `# Python3 implementation to find array``# elements equal to the sum of any``# subarray of at least size 2` `# Function to find all elements``def` `findElements(arr, n):` `    ``if` `(n ``=``=` `1``):``        ``return``;` `    ``pre ``=` `[``0``] ``*` `n;` `    ``# Create a prefix array``    ``pre[``0``] ``=` `arr[``0``];` `    ``for` `i ``in` `range``(``1``, n):``        ``pre[i] ``=` `arr[i] ``+` `pre[i ``-` `1``];` `    ``mp ``=` `{};` `    ``# Mark the sum of all sub arrays as true``    ``for` `i ``in` `range``(``1``, n ``-` `1``):``        ``mp[pre[i]] ``=` `True``;` `        ``for` `j ``in` `range``(i ``+` `1``, n):``            ``mp[pre[j] ``-` `pre[i ``-` `1``]] ``=` `True``;` `    ``# Check all elements which``    ``# are marked true in the map``    ``for` `i ``in` `range``(n):``        ``if` `arr[i] ``in` `mp:``            ``print``(arr[i], end ``=` `" "``);``        ``else``:``            ``pass``    ` `    ``print``()` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:` `    ``arr1 ``=` `[ ``1``, ``2``, ``3``, ``4``, ``5``, ``6` `];``    ``n1 ``=` `len``(arr1);` `    ``findElements(arr1, n1);``    ` `# This code is contributed by AnkitRai01`

## C#

 `// C# implementation to find array``// elements equal to the sum of any``// subarray of at least size 2``using` `System;``using` `System.Collections.Generic;``class` `GFG{``    ` `// Function to find all elements``static` `void` `findElements(``int``[] arr,``                         ``int` `n)``{``  ``if` `(n == 1)``    ``return``;` `  ``int` `[]pre = ``new` `int``[n];` `  ``// Create a prefix array``  ``pre[0] = arr[0];` `  ``for``(``int` `i = 1; i < n; i++)``    ``pre[i] = arr[i] + pre[i - 1];` `  ``Dictionary<``int``,``             ``Boolean> mp = ``new` `Dictionary<``int``,``                                          ``Boolean>();` `  ``// Mark the sum of all sub arrays as true``  ``for``(``int` `i = 1; i < n - 1; i++)``  ``{``    ``if``(!mp.ContainsKey(pre[i]))``      ``mp.Add(pre[i], ``true``);` `    ``for``(``int` `j = i + 1; j < n; j++)``    ``{``      ``if``(!mp.ContainsKey(pre[j] - pre[i - 1]))``        ``mp.Add(pre[j] - pre[i - 1], ``true``);``    ``}``  ``}` `  ``// Check all elements``  ``// which are marked``  ``// true in the map``  ``for``(``int` `i = 0; i < n; i++)``  ``{``    ``if` `(mp.ContainsKey(arr[i]))``    ``{``      ``Console.Write(arr[i] + ``" "``);``    ``}``  ``}``  ``Console.WriteLine();``}` `// Driver Code``public` `static` `void` `Main(String[] args)``{``  ``int` `[]arr1 = {1, 2, 3, 4, 5, 6};``  ``int` `n1 = arr1.Length;``  ``findElements(arr1, n1);``}``}` `// This code is contributed by gauravrajput1`

## Javascript

 ``

Output:

`3 5 6`

My Personal Notes arrow_drop_up