# Find if array has an element whose value is half of array sum

Given a sorted array (with unique entries), we have to find whether there exist an element(say X) which is exactly half the sum of all the elements of the array including X.

Examples:

```Input : A = {1, 2, 3}
Output : YES
Sum of all the elements is 6 = 3*2;

Input : A = {2, 4}
Output : NO
Sum of all the elements is 6, and 3 is not present in the array.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

1. Calculate the sum of all the elements of the array.
2. There can be two cases
….a. Sum is Odd, implies we cannot find such X, since all entries are integer.
….b. Sum is Even, if half the value of sum exist in array then answer is YES else NO.
3. We can use Binary Search to find if sum/2 exist in array or not (Since it does not have duplicate entries)

Below is the implementation of above approach:

## C++

 `// CPP program to check if array has an ` `// element whose value is half of array ` `// sum. ` `#include ` `using` `namespace` `std; ` ` `  `// Function to check if answer exists ` `bool` `checkForElement(``int` `array[], ``int` `n) ` `{ ` `    ``// Sum of all array elements ` `    ``int` `sum = 0; ` `    ``for` `(``int` `i = 0; i < n; i++) ` `        ``sum += array[i];  ` ` `  `    ``// If sum is odd  ` `    ``if` `(sum % 2)  ` `       ``return` `false``; ` ` `  `    ``sum /= 2; ``// If sum is Even ` ` `  `    ``// Do binary search for the required element ` `    ``int` `start = 0; ` `    ``int` `end = n - 1; ` `    ``while` `(start <= end)  ` `    ``{ ` `        ``int` `mid = start + (end - start) / 2; ` `        ``if` `(array[mid] == sum)  ` `            ``return` `true``;         ` `        ``else` `if` `(array[mid] > sum)  ` `            ``end = mid - 1;         ` `        ``else` `            ``start = mid + 1; ` `    ``} ` ` `  `    ``return` `false``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `array[] = { 1, 2, 3 }; ` `    ``int` `n = ``sizeof``(array) / ``sizeof``(array[0]); ` `    ``if` `(checkForElement(array, n)) ` `      ``cout << ``"Yes"``; ` `    ``else` `      ``cout << ``"No"``; ` `    ``return` `0; ` `} `

## Java

 `// Java program to check if array has an ` `// element whose value is half of array ` `// sum. ` ` `  `import` `java.io.*; ` ` `  `class` `GFG { ` ` `  `// Function to check if answer exists ` `static` `boolean` `checkForElement(``int` `array[], ``int` `n) ` `{ ` `    ``// Sum of all array elements ` `    ``int` `sum = ``0``; ` `    ``for` `(``int` `i = ``0``; i < n; i++) ` `        ``sum += array[i];  ` ` `  `    ``// If sum is odd  ` `    ``if` `(sum % ``2``>``0``)  ` `    ``return` `false``; ` ` `  `    ``sum /= ``2``; ``// If sum is Even ` ` `  `    ``// Do binary search for the required element ` `    ``int` `start = ``0``; ` `    ``int` `end = n - ``1``; ` `    ``while` `(start <= end)  ` `    ``{ ` `        ``int` `mid = start + (end - start) / ``2``; ` `        ``if` `(array[mid] == sum)  ` `            ``return` `true``;      ` `        ``else` `if` `(array[mid] > sum)  ` `            ``end = mid - ``1``;      ` `        ``else` `            ``start = mid + ``1``; ` `    ``} ` ` `  `    ``return` `false``; ` `} ` ` `  `// Driver code ` ` `  `    ``public` `static` `void` `main (String[] args) { ` `    ``int` `array[] = { ``1``, ``2``, ``3` `}; ` `    ``int` `n = array.length; ` `    ``if` `(checkForElement(array, n)) ` `    ``System.out.println( ``"Yes"``); ` `    ``else` `    ``System.out.println( ``"No"``); ` `    ``} ` `} ` `// This code is contributed by anuj_67.. `

## Python 3

 `# Python 3 program to check if array  ` `# has an element whose value is half  ` `# of array sum. ` ` `  `# Function to check if answer exists ` `def` `checkForElement(array, n): ` `     `  `    ``# Sum of all array elements ` `    ``sum` `=` `0` `    ``for` `i ``in` `range``(n): ` `        ``sum` `+``=` `array[i]  ` ` `  `    ``# If sum is odd  ` `    ``if` `(``sum` `%` `2``):  ` `        ``return` `False` ` `  `    ``sum` `/``/``=` `2`     `# If sum is Even ` ` `  `    ``# Do binary search for the ` `    ``# required element ` `    ``start ``=` `0` `    ``end ``=` `n ``-` `1` `    ``while` `(start <``=` `end) : ` `        ``mid ``=` `start ``+` `(end ``-` `start) ``/``/` `2` `        ``if` `(array[mid] ``=``=` `sum``):  ` `            ``return` `True`     `        ``elif` `(array[mid] > ``sum``) : ` `            ``end ``=` `mid ``-` `1``;      ` `        ``else``: ` `            ``start ``=` `mid ``+` `1` ` `  `    ``return` `False` ` `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"``: ` `    ``array ``=` `[ ``1``, ``2``, ``3` `] ` `    ``n ``=` `len``(array) ` `    ``if` `(checkForElement(array, n)): ` `        ``print``(``"Yes"``) ` `    ``else``: ` `        ``print``(``"No"``) ` ` `  `# This code is contributed  ` `# by ChitraNayal `

## C#

 `// C# program to check if array has  ` `// an element whose value is half  ` `// of array sum. ` `using` `System; ` ` `  `class` `GFG ` `{ ` `// Function to check if answer exists ` `static` `bool` `checkForElement(``int``[] array, ` `                            ``int` `n) ` `{ ` `    ``// Sum of all array elements ` `    ``int` `sum = 0; ` `    ``for` `(``int` `i = 0; i < n; i++) ` `        ``sum += array[i];  ` ` `  `    ``// If sum is odd  ` `    ``if` `(sum % 2 > 0)  ` `    ``return` `false``; ` ` `  `    ``sum /= 2; ``// If sum is Even ` ` `  `    ``// Do binary search for the  ` `    ``// required element ` `    ``int` `start = 0; ` `    ``int` `end = n - 1; ` `    ``while` `(start <= end)  ` `    ``{ ` `        ``int` `mid = start + (end - start) / 2; ` `        ``if` `(array[mid] == sum)  ` `            ``return` `true``;      ` `        ``else` `if` `(array[mid] > sum)  ` `            ``end = mid - 1;      ` `        ``else` `            ``start = mid + 1; ` `    ``} ` ` `  `    ``return` `false``; ` `} ` ` `  `// Driver Code ` `static` `void` `Main() ` `{ ` `    ``int` `[]array = { 1, 2, 3 }; ` `    ``int` `n = array.Length; ` `    ``if` `(checkForElement(array, n)) ` `        ``Console.WriteLine(``"Yes"``); ` `    ``else` `        ``Console.WriteLine(``"No"``); ` `} ` `}  ` ` `  `// This code is contributed by ANKITRAI1 `

## PHP

 ` ``\$sum``)  ` `            ``\$end` `= ``\$mid` `- 1;      ` `        ``else` `            ``\$start` `= ``\$mid` `+ 1; ` `    ``} ` ` `  `    ``return` `false; ` `} ` ` `  `// Driver code ` `\$array` `= ``array``(1, 2, 3 ); ` `\$n` `= sizeof(``\$array``); ` `if` `(checkForElement(``\$array``, ``\$n``)) ` `    ``echo` `"Yes"``; ` `else` `    ``echo` `"No"``; ` `     `  `// This code is contributed  ` `// by Shivi_Aggarwal  ` `?> `

Output:

```Yes
```

Time Complexity: O(n)
Auxiliary Space: O(1)

Another efficient solution that works for unsorted arrays also
The idea is to use hashing.

## C++

 `// CPP program to check if array has an ` `// element whose value is half of array ` `// sum. ` `#include ` `using` `namespace` `std; ` ` `  `// Function to check if answer exists ` `bool` `checkForElement(``int` `array[], ``int` `n) ` `{ ` `    ``// Sum of all array elements ` `    ``// and storing in a hash table ` `    ``unordered_set<``int``> s; ` `    ``int` `sum = 0; ` `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``sum += array[i];  ` `        ``s.insert(array[i]); ` `    ``} ` `   `  `    ``// If sum/2 is present in hash table ` `    ``if` `(sum % 2 == 0 && s.find(sum/2) != s.end()) ` `        ``return` `true``; ` `    ``else` `        ``return` `false``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `array[] = { 1, 2, 3 }; ` `    ``int` `n = ``sizeof``(array) / ``sizeof``(array[0]); ` `    ``if` `(checkForElement(array, n)) ` `      ``cout << ``"Yes"``; ` `    ``else` `      ``cout << ``"No"``; ` `    ``return` `0; ` `} `

## Java

 `// Java program to check if array has an  ` `// element whose value is half of array  ` `// sum.  ` ` `  `import` `java.util.*; ` ` `  `class` `GFG { ` ` `  `// Function to check if answer exists  ` `    ``static` `boolean` `checkForElement(``int` `array[], ``int` `n) { ` `        ``// Sum of all array elements  ` `        ``// and storing in a hash table  ` `        ``Set s = ``new` `LinkedHashSet<>(); ` `        ``int` `sum = ``0``; ` `        ``for` `(``int` `i = ``0``; i < n; i++) { ` `            ``sum += array[i]; ` `            ``s.add(array[i]); ` `        ``} ` `        ``// If sum/2 is present in hash table  ` `        ``if` `(sum % ``2` `== ``0` `&& s.contains(sum / ``2``) ` `                ``&& (sum / ``2` `)== s.stream().skip(s.size() - ``1``).findFirst().get()) { ` `            ``return` `true``; ` `        ``} ``else` `{ ` `            ``return` `false``; ` `        ``} ` `    ``} ` ` `  `// Driver code  ` `    ``public` `static` `void` `main(String[] args) { ` `        ``int` `array[] = {``1``, ``2``, ``3``}; ` `        ``int` `n = array.length; ` `        ``System.out.println(checkForElement(array, n) ? ``"Yes"` `: ``"No"``); ` `    ``} ` `} ` `// This code is contributed by 29AjayKumar `

## Python3

 `# Python 3 program to check if array has an ` `# element whose value is half of array ` `# sum. ` ` `  `# Function to check if answer exists ` `def` `checkForElement(array, n): ` `    ``# Sum of all array elements ` `    ``# and storing in a hash table ` `    ``s ``=` `set``() ` `    ``sum` `=` `0` `    ``for` `i ``in` `range``(n): ` `        ``sum` `+``=` `array[i]  ` `        ``s.add(array[i]) ` ` `  `    ``# If sum/2 is present in hash table ` `    ``f ``=` `int``(``sum` `/` `2``) ` `    ``if` `(``sum` `%` `2` `=``=` `0` `and`  `f ``in` `s): ` `        ``return` `True` `    ``else``: ` `        ``return` `False` ` `  `# Driver code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``array ``=` `[``1``, ``2``, ``3``] ` `    ``n ``=` `len``(array) ` `    ``if` `(checkForElement(array, n)): ` `        ``print``(``"Yes"``) ` `    ``else``: ` `        ``print``(``"No"``) ` ` `  `# This code is contributed by ` `# Surendra_Gangwar `

## C#

 `// C# program to check if array has an  ` `// element whose value is half of array  ` `// sum. ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `class` `GFG  ` `{ ` ` `  `    ``// Function to check if answer exists  ` `    ``static` `Boolean checkForElement(``int` `[]array, ``int` `n)  ` `    ``{ ` `        ``// Sum of all array elements  ` `        ``// and storing in a hash table  ` `        ``HashSet<``int``> s = ``new` `HashSet<``int``>(); ` `        ``int` `sum = 0; ` `        ``for` `(``int` `i = 0; i < n; i++)  ` `        ``{ ` `            ``sum += array[i]; ` `            ``s.Add(array[i]); ` `        ``} ` `         `  `        ``// If sum/2 is present in hash table  ` `        ``if` `(sum % 2 == 0 && s.Contains(sum / 2)) ` `        ``{ ` `            ``return` `true``; ` `        ``} ` `        ``else` `        ``{ ` `            ``return` `false``; ` `        ``} ` `    ``} ` ` `  `    ``// Driver code  ` `    ``public` `static` `void` `Main(String[] args) ` `    ``{ ` `        ``int` `[]array = {1, 2, 3}; ` `        ``int` `n = array.Length; ` `        ``Console.WriteLine(checkForElement(array, n) ? ``"Yes"` `: ``"No"``); ` `    ``} ` `} ` ` `  `// This code is contributed by Princi Singh `

Output:

```Yes
```

Time Complexity : O(n)
Auxiliary Space : O(n)

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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 Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.