Open In App

Check if the array has an element which is equal to sum of all the remaining elements

Improve
Improve
Like Article
Like
Save
Share
Report

Given an array of N elements, the task is to check if the array has an element that is equal to the sum of all the remaining elements. 

Examples

Input: a[] = {5, 1, 2, 2}
Output: Yes
we can write 5=(1+2+2)

Input: a[] = {2, 1, 2, 4, 3}
Output: No

Approach: Suppose that the total elements in the array is N. Now, if there exists any such element such that the element is equal to the sum of remaining elements then it can be said that the array can be divided into two halves with equal sum such that one half has only one element with value sum/2.

Also, since both halves have equal sum, the overall sum of the array must be even as we know that: 

  • ODD + ODD = EVEN
  • EVEN + EVEN = EVEN

Algorithm

  • Iterate over the array, and count the occurrence of all the elements and store in a map. Also summate the array elements.
  • The condition given in the problem is only possible when the below conditions are met. 
    1. Total Sum of the array is even
    2. sum/2 occurrence in the array should be equal to atleast 1.
  • If the above conditions are not met, hence it is not possible to remove any such element.

Below is the implementation of the above approach: 

C++




// C++ program to Check if the array
// has an element which is equal to sum
// of all the remaining elements
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if such element exists or not
bool isExists(int a[], int n)
{
    // Storing frequency in map
    unordered_map<int, int> freq;
 
    // Stores the sum
    int sum = 0;
 
    // Traverse the array and count the
    // array elements
    for (int i = 0; i < n; i++) {
        freq[a[i]]++;
        sum += a[i];
    }
 
    // Only possible if sum is even
    if (sum % 2 == 0) {
        // If half sum is available
        if (freq[sum / 2])
            return true;
    }
 
    return false;
}
 
// Driver code
int main()
{
    int a[] = { 5, 1, 2, 2 };
 
    int n = sizeof(a) / sizeof(a[0]);
 
    if (isExists(a, n))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}


Java




// Java program to Check if the array
// has an element which is equal to sum
// of all the remaining elements
import java.util.*;
class Solution{
 
// Function to check if such element exists or not
static boolean isExists(int a[], int n)
{
    // Storing frequency in map
    Map<Integer, Integer> freq= new HashMap<Integer, Integer>();
   
    // Stores the sum
    int sum = 0;
   
    // Traverse the array and count the
    // array elements
    for (int i = 0; i < n; i++) {
        freq.put(a[i],freq.get(a[i])==null?0:freq.get(a[i])+1);
        sum += a[i];
    }
   
    // Only possible if sum is even
    if (sum % 2 == 0) {
        // If half sum is available
        if (freq.get(sum / 2)!=null)
            return true;
    }
   
    return false;
}
   
// Driver code
public static void main(String args[])
{
    int a[] = { 5, 1, 2, 2 };
   
    int n = a.length;
   
    if (isExists(a, n))
        System.out.println( "Yes");
    else
        System.out.println( "No");
   
}
}
//contributed by Arnab Kundu


Python3




# Python3 code to check if the array has
# an element which is equal to sum of all
# the remaining elements
 
# function to check if such element
# exists or not
def isExists(a, n):
     
    # storing frequency in dict
    freq = {i : 0 for i in a}
     
    #stores the sum
    Sum = 0
     
    # traverse the array and count
    # the array element
    for i in range(n):
        freq[a[i]] += 1
        Sum += a[i]
     
    # Only possible if sum is even
    if Sum % 2 == 0:
         
        #if half sum is available
        if freq[Sum // 2]:
            return True
    return False
     
# Driver code
a = [5, 1, 2, 2]
 
n = len(a)
 
if isExists(a, n):
    print("Yes")
else:
    print("No")
 
# This code is contributed
# by Mohit Kumar


C#




// C# program to Check if the array
// has an element which is equal to sum
// of all the remaining elements
using System;
using System.Collections.Generic;
     
class Solution
{
 
// Function to check if such element exists or not
static Boolean isExists(int []arr, int n)
{
    // Storing frequency in map
    Dictionary<int, int> m = new Dictionary<int, int>();
     
    // Stores the sum
    int sum = 0;
     
    // Traverse the array and count the
    // array elements
    for (int i = 0; i < n; i++)
    {
        if(m.ContainsKey(arr[i]))
        {
            var val = m[arr[i]];
            m.Remove(arr[i]);
            m.Add(arr[i], val + 1);
        }
        else
        {
            m.Add(arr[i], 1);
        }
        sum += arr[i];
    }
     
    // Only possible if sum is even
    if (sum % 2 == 0)
    {
        // If half sum is available
        if (m[sum / 2] != 0)
            return true;
    }
     
    return false;
}
     
// Driver code
public static void Main()
{
    int []a = { 5, 1, 2, 2 };
     
    int n = a.Length;
     
    if (isExists(a, n))
        Console.WriteLine( "Yes");
    else
        Console.WriteLine( "No");
}
}
 
/* This code contributed by PrinciRaj1992 */


Javascript




<script>
 
// JavaScript program to Check if the array
// has an element which is equal to sum
// of all the remaining elements
 
// Function to check if such element exists or not
function isExists(a, n)
{
    // Storing frequency in map
    let freq= new Map();
   
    // Stores the sum
    let sum = 0;
   
    // Traverse the array and count the
    // array elements
    for (let i = 0; i < n; i++) {
        freq.set(a[i],freq.get(a[i])==null?0:freq.get(a[i])+1);
        sum += a[i];
    }
   
    // Only possible if sum is even
    if (sum % 2 == 0) {
        // If half sum is available
        if (freq.get(sum / 2)!=null)
            return true;
    }
   
    return false;
}
     
// Driver Code
 
           let a = [ 5, 1, 2, 2 ];
   
    let n = a.length;
   
    if (isExists(a, n))
        document.write( "Yes");
    else
        document.write( "No");
         
</script>


Output

Yes

Complexity Analysis:

  • Time Complexity: O(N) 
  • Auxiliary Space: O(N)

Another Approach: Calculate the total sum of all the elements in the array. Then run a FOR-loop to check if each element * 2 == total. If any such element is found, return True, else False at the end of the loop. 

  • Traverse the array and calculate the total sum of array elements
  • Check if the array has an element that is equal to the sum of all the remaining elements.
    • If true, return true,
  • Return false.

Below is the implementation of the above approach:

C++




// C++ program to Check if the array
// has an element which is equal to sum
// of all the remaining elements
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if such element exists or not
bool isExists(int arr[], int n)
{
    // Stores the sum
    int sum = 0;
 
    // Traverse the array and calculate the sum
    // of array elements
    for (int i = 0; i < n; i++) {
        sum += arr[i];
    }
 
    // Check if the array has an element that is equal to
    // the sum of all the remaining elements.
    for (int i = 0; i < n; i++) {
        if (sum - arr[i] == arr[i])
            return true;
    }
 
    return false;
}
 
// Driver code
int main()
{
    int a[] = { 5, 1, 2, 2 };
 
    int n = sizeof(a) / sizeof(a[0]);
 
    if (isExists(a, n))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}


Java




// Java program to Check if the array
// has an element which is equal to sum
// of all the remaining elements
 
import java.util.*;
 
public class GFG {
 
    // Function to check if such element exists or not
    static boolean isExists(int arr[], int n)
    {
        // Stores the sum
        int sum = 0;
 
        // Traverse the array and calculate the sum
        // of array elements
        for (int i = 0; i < n; i++) {
            sum += arr[i];
        }
 
        // Check if the array has an element that is equal
        // to the sum of all the remaining elements.
        for (int i = 0; i < n; i++) {
            if (sum - arr[i] == arr[i])
                return true;
        }
 
        return false;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int a[] = { 5, 1, 2, 2 };
 
        int n = a.length;
 
        if (isExists(a, n))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This code is contributed by Karandeep1234


Python3




# Python program to Check if the array
# has an element which is equal to sum
# of all the remaining elements
 
# Function to check if such element exists or not
def isExists(arr, n):
    # Stores the sum
    sum = 0
 
    # Traverse the array and calculate the sum
    # of array elements
    for i in range(n):
        sum += arr[i]
 
    # Check if the array has an element that is equal to
    # the sum of all the remaining elements.
    for i in range(n):
        if sum-arr[i] == arr[i]: return True
 
    return False
 
# Driver code
a = [5, 1, 2, 2]
n = len(a)
if isExists(a,n): print('Yes')
else: print('No')
 
# This code is contributed by hardikkushwaha.


C#




// C# program to Check if the array
// has an element which is equal to sum
// of all the remaining elements
 
using System;
 
public class GFG {
 
    // Function to check if such element exists or not
    static bool isExists(int[] arr, int n)
    {
        // Stores the sum
        int sum = 0;
 
        // Traverse the array and calculate the sum
        // of array elements
        for (int i = 0; i < n; i++) {
            sum += arr[i];
        }
 
        // Check if the array has an element that is equal
        // to the sum of all the remaining elements.
        for (int i = 0; i < n; i++) {
            if (sum - arr[i] == arr[i])
                return true;
        }
 
        return false;
    }
 
    // Driver code
    public static void Main(string[] args)
    {
        int[] a = { 5, 1, 2, 2 };
 
        int n = a.Length;
 
        if (isExists(a, n))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
 
// This code is contributed by Karandeep1234


Javascript




// Javascript program to Check if the array
// has an element which is equal to sum
// of all the remaining elements
 
// Function to check if such element exists or not
function isExists(arr, n)
{
    // Stores the sum
    let sum = 0;
 
    // Traverse the array and calculate the sum
    // of array elements
    for (let i = 0; i < n; i++) {
        sum += arr[i];
    }
 
    // Check if the array has an element that is equal to
    // the sum of all the remaining elements.
    for (let i = 0; i < n; i++) {
        if (sum - arr[i] == arr[i])
            return true;
    }
 
    return false;
}
 
// Driver code
let a = [ 5, 1, 2, 2 ];
let n = a.length;
 
if (isExists(a, n))
    console.log("Yes");
else
    console.log("No");
 
// This code is contributed by poojaagarwals.


Output

Yes

Time Complexity: O(N), where N is the length of the given array.
Auxiliary Space: O(1)



Last Updated : 13 Jan, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads