# Make all elements zero by decreasing any two elements by one at a time

• Last Updated : 27 Feb, 2022

Given an array arr[], the task is to check whether it is possible to make all the elements of the array zero by the given operation. In a single operation, any two elements arr[i] and arr[j] can be decremented by one at the same time.
Examples:

Input: arr[] = {1, 2, 1, 2, 2}
Output: Yes
Decrement the 1st and the 2nd element, arr[] = {0, 1, 1, 2, 2}
Decrement the 2nd and the 3rd element, arr[] = {0, 0, 0, 2, 2}
Decrement the 4th and the 5th element, arr[] = {0, 0, 0, 1, 1}
Decrement the 4th and the 5th element, arr[] = {0, 0, 0, 0, 0}
Input: arr[] = {1, 2, 3, 4, 5}
Output: No

Approach: The given array can be only be made zero if it holds the following conditions true:

1. The sum of the elements of the array must be even.
2. The largest elements must be less than or equal to âŒŠsum / 2âŒ‹ where sum is the sum of the other elements.

Below is the implementation of the above approach:

## CPP

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function that returns true if all``// the array elements can be made``// 0 with the given operation``bool` `checkZeroArray(``int``* arr, ``int` `n)``{` `    ``// Find the maximum element``    ``// and the sum``    ``int` `sum = 0, maximum = INT_MIN;``    ``for` `(``int` `i = 0; i < n; i++) {``        ``sum = sum + arr[i];``        ``maximum = max(maximum, arr[i]);``    ``}` `    ``// Check the required condition``    ``if` `(sum % 2 == 0 && maximum <= sum / 2)``        ``return` `true``;` `    ``return` `false``;``}` `// Driver code``int` `main()``{``    ``int` `arr[] = { 1, 2, 1, 2, 2 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(``int``);` `    ``if` `(checkZeroArray(arr, n))``        ``cout << ``"Yes"``;``    ``else``        ``cout << ``"No"``;` `    ``return` `0;``}`

## Java

 `// Java implementation of the above approach``public` `class` `GFG``{``    ` `    ``// Function that returns true if all``    ``// the array elements can be made``    ``// 0 with the given operation``    ``static` `boolean` `checkZeroArray(``int` `[]arr, ``int` `n)``    ``{``    ` `        ``// Find the maximum element``        ``// and the sum``        ``int` `sum = ``0``, maximum = Integer.MIN_VALUE;``        ` `        ``for` `(``int` `i = ``0``; i < n; i++)``        ``{``            ``sum = sum + arr[i];``            ``maximum = Math.max(maximum, arr[i]);``        ``}``    ` `        ``// Check the required condition``        ``if` `(sum % ``2` `== ``0` `&& maximum <= sum / ``2``)``            ``return` `true``;``    ` `        ``return` `false``;``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `main (String[] args)``    ``{``        ``int` `arr[] = { ``1``, ``2``, ``1``, ``2``, ``2` `};``        ``int` `n = arr.length;``    ` `        ``if` `(checkZeroArray(arr, n) == ``true``)``            ``System.out.println(``"Yes"``);``        ``else``            ``System.out.println(``"No"``);``    ``}``}` `// This code is contributed by AnkitRai01`

## Python

 `# Python3 implementation of the approach` `# Function that returns true if all``# the array elements can be made``# 0 with the given operation``def` `checkZeroArray(arr,n):` `    ``# Find the maximum element``    ``# and the sum``    ``sum` `=` `0``    ``maximum ``=` `-``10``*``*``9``    ``for` `i ``in` `range``(n):``        ``sum` `=` `sum` `+` `arr[i]``        ``maximum ``=` `max``(maximum, arr[i])` `    ``# Check the required condition``    ``if` `(``sum` `%` `2` `=``=` `0` `and` `maximum <``=` `sum` `/``/` `2``):``        ``return` `True` `    ``return` `False` `# Driver code` `arr ``=` `[``1``, ``2``, ``1``, ``2``, ``2``]``n ``=` `len``(arr)` `if` `(checkZeroArray(arr, n)):``    ``print``(``"Yes"``)``else``:``    ``print``(``"No"``)` `# This code is contributed by mohit kumar 29`

## C#

 `// C# implementation of the above approach``using` `System;` `class` `GFG``{``    ` `    ``// Function that returns true if all``    ``// the array elements can be made``    ``// 0 with the given operation``    ``static` `bool` `checkZeroArray(``int` `[]arr, ``int` `n)``    ``{``    ` `        ``// Find the maximum element``        ``// and the sum``        ``int` `sum = 0, maximum = ``int``.MinValue;``        ` `        ``for` `(``int` `i = 0; i < n; i++)``        ``{``            ``sum = sum + arr[i];``            ``maximum = Math.Max(maximum, arr[i]);``        ``}``    ` `        ``// Check the required condition``        ``if` `(sum % 2 == 0 && maximum <= sum / 2)``            ``return` `true``;``    ` `        ``return` `false``;``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `Main ()``    ``{``        ``int` `[]arr = { 1, 2, 1, 2, 2 };``        ``int` `n = arr.Length;``    ` `        ``if` `(checkZeroArray(arr, n) == ``true``)``            ``Console.WriteLine(``"Yes"``);``        ``else``            ``Console.WriteLine(``"No"``);``    ``}``}` `// This code is contributed by AnkitRai01`

## Javascript

 ``

Output:

`Yes`

Time Complexity: O(n)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up