Related Articles
Find if array has an element whose value is half of array sum
• Difficulty Level : Basic
• Last Updated : 09 Jun, 2021

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

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

## Javascript

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

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 industry experts, please refer DSA Live Classes

My Personal Notes arrow_drop_up