Make all the elements of array even with given operations

• Last Updated : 31 May, 2021

Given an array arr[] of positive integers, find the minimum number of operations required to make all the array elements even where:

1. If there is an odd number, then, increment the element and the next adjacent element by 1.
2. Each increment costs one operation.

Note: If there is any number in arr[] which is odd after all operations, then, print -1.

Examples:

Input: arr[] = {2, 3, 4, 5, 6}
Output:
Explanation:
Now the array becomes {2, 4, 5, 5, 6}.
Now the array becomes {2, 4, 6, 6, 6}.
The resultant array has all even numbers.
The total number of operations for 4 increments is 4.

Input: arr[] = {5, 6}
Output: -1
Explanation:
Adding 1 to 5(0th index), then we have to increment 1 to its adjacent element 6(1st index).
Now the array becomes {6, 7}.
And we have 1 odd number left after all possible increments. Therefore, we can’t make all array elements even.

Approach:
This problem can be solved using Greedy Approach. The following are the steps:

1. Traverse the given array arr[].
2. If an odd element occurs, then increment that element by 1 to make it even and the next adjacent element by 1.
3. Repeat the above step for all the odd elements for the given array arr[].
4. If all the elements in arr[] are even, then print the number of operations.
5. Else print -1.

Below is the implementation of the above approach:

C++

 // C++ program to make all array// element even#include "bits/stdc++.h"using namespace std; // Function to count the total// number of operations needed to make// all array element evenint countOperations(int arr[], int n){    int count = 0;     // Traverse the given array    for (int i = 0; i < n - 1; i++) {         // If an odd element occurs        // then increment that element        // and next adjacent element        // by 1        if (arr[i] & 1) {            arr[i]++;            arr[i + 1]++;            count += 2;        }    }     // Traverse the array if any odd    // element occurs then return -1    for (int i = 0; i < n; i++) {        if (arr[i] & 1)            return -1;    }     // Returns the count of operations    return count;} int main(){    int arr[] = { 2, 3, 4, 5, 6 };    int n = sizeof(arr) / sizeof(int);    cout << countOperations(arr, n);    return 0;}

Java

 // Java program to make all array// element evenclass GFG{ // Function to count the total// number of operations needed to make// all array element evenstatic int countOperations(int arr[], int n){    int count = 0;     // Traverse the given array    for (int i = 0; i < n - 1; i++)    {         // If an odd element occurs        // then increment that element        // and next adjacent element        // by 1        if (arr[i] % 2 == 1)        {            arr[i]++;            arr[i + 1]++;            count += 2;        }    }     // Traverse the array if any odd    // element occurs then return -1    for (int i = 0; i < n; i++)    {        if (arr[i] % 2 == 1)            return -1;    }     // Returns the count of operations    return count;} // Driver codepublic static void main(String[] args){    int arr[] = { 2, 3, 4, 5, 6 };    int n = arr.length;    System.out.print(countOperations(arr, n));}} // This code is contributed by 29AjayKumar

Python3

 # Python3 program to make all array# element even # Function to count the total# number of operations needed to make# all array element evendef countOperations(arr, n) :     count = 0;     # Traverse the given array    for i in range(n - 1) :         # If an odd element occurs        # then increment that element        # and next adjacent element        # by 1        if (arr[i] & 1) :            arr[i] += 1;            arr[i + 1] += 1;            count += 2;     # Traverse the array if any odd    # element occurs then return -1    for i in range(n) :        if (arr[i] & 1) :            return -1;     # Returns the count of operations    return count; if __name__ == "__main__" :     arr = [ 2, 3, 4, 5, 6 ];    n = len(arr);    print(countOperations(arr, n));         # This code is contributed by AnkitRai01

C#

 // C# program to make all array// element evenusing System; class GFG{ // Function to count the total// number of operations needed to make// all array element evenstatic int countOperations(int []arr, int n){    int count = 0;     // Traverse the given array    for (int i = 0; i < n - 1; i++)    {         // If an odd element occurs        // then increment that element        // and next adjacent element        // by 1        if (arr[i] % 2 == 1)        {            arr[i]++;            arr[i + 1]++;            count += 2;        }    }     // Traverse the array if any odd    // element occurs then return -1    for (int i = 0; i < n; i++)    {        if (arr[i] % 2 == 1)            return -1;    }     // Returns the count of operations    return count;} // Driver codepublic static void Main(){    int []arr = { 2, 3, 4, 5, 6 };    int n = arr.Length;    Console.Write(countOperations(arr, n));}} // This code is contributed by AnkitRai01

Javascript


Output:
4

Time Complexity: O(N) where N is the number of elements in the array.

My Personal Notes arrow_drop_up