Given an array arr[] containing N numbers, the task is to merge the subarray of consecutive even numbers by replacing all consecutive even numbers by the first even element of that subarray.
Note: A series of even integers are said to be consecutive if there are at least three even numbers in the given series. Therefore, merge elements in subarray which have at least 3 consecutive even numbers.
Examples:
Input: arr[] = {2, 2, 2, 100, 5, 4, 2, 9, 10, 88, 24}Â
Output: 2 5 4 2 9 10Â
Explanation:Â
The given series contains two consecutive even subsequences. They are:Â
{2, 2, 2, 100}, {10, 88, 24}. The two subsequences have to be merged to the first element in the subseries.Â
Therefore, {2, 2, 2, 100} is replaced by 2 and {10, 88, 24} is replaced by 10 in the original series.
Input: arr[] = {2, 4, 5, 3, 6, 8, 10, 3, 4}Â
Output: 2 4 5 3 6 3 4
Approach: In order to solve this problem, we need to first find if there exists a consecutive even subsequence with a size greater than three. Therefore, the idea is to iterate through the given array and check if a number is even or not.
- Traverse through the array.
- Check if the element is even or not.
- If it is even, creates a temporary array to store the next continuous even numbers until the next number is odd.
- Continue adding the elements in the temp array until an odd number occurs.
- If the size of this temporary array is greater than three, then remove these elements from the given array and replace them with the first element of this temporary array.
- Empty the temporary array to compute the next set of even subsequences.
Below is the implementation of the above approach:
C++
// C++ program to merge the array// as per the given condition#include<bits/stdc++.h>using namespace std;Â
// Function to merge the array// as per the given conditionvector<int> merge(vector<int> arr){         // Variable to store the final    // sequence    vector<int> ans;Â
    // Temporary array to store the     // even numbers while traversing    vector<int> e;    int i = 0;    int j = 0;    int count = 0;         // Iterating through the array    while(i < arr.size())    {                 // If the element is even        if(arr[i] % 2 == 0)        {            j = i;                         // Iterating till an odd element            // is found            while(j < arr.size())            {                                 // Keep appending into the                 // temporary array if the                 // even number is occurred                if (arr[j] % 2 == 0)                {                    e.push_back(arr[j]);                    count += 1;                }Â
                // Break if an odd number                 // has occurred                else                    break;                                 j += 1;            }                 // If the series has at least             // three elements, then merge            if(count >= 3)               ans.push_back(e[0]);Â
            // Else, add all elements to the            // answer array            else            {                for (auto i: e)                     ans.push_back(i);            }                             // Resetting the count and             // temp array            count = 0;            e.clear();            i = j;        }                     // If the element is odd, add         // it to the answer array        else        {            ans.push_back(arr[i]);            i += 1;        }    }         return ans;}         // Driver codeint main(){Â
    vector<int> arr({ 2, 2, 2, 100, 5, 4,                       2, 9, 10, 88, 24 });    vector<int> ans = merge(arr);         cout << "[";    for(int i= 0; i < ans.size(); i++)    {        if(i == ans.size() - 1)        cout << ans[i] << "]";        else        cout << ans[i] << ", ";    }Â
}Â Â Â Â Â // This code is contributed by Samarth |
Java
// Java program to merge the array// as per the given conditionimport java.util.*;  class GFG{  // Function to merge the array// as per the given conditionstatic Vector<Integer> merge(int []arr){          // Variable to store the final    // sequence    Vector<Integer> ans = new Vector<Integer>();      // Temporary array to store the     // even numbers while traversing    Vector<Integer> e = new Vector<Integer>();         int i = 0;    int j = 0;    int count = 0;          // Iterating through the array    while (i < arr.length)    {                  // If the element is even        if (arr[i] % 2 == 0)        {            j = i;                          // Iterating till an odd element            // is found            while (j < arr.length)            {                                  // Keep appending into the                 // temporary array if the                 // even number is occurred                if (arr[j] % 2 == 0)                {                    e.add(arr[j]);                    count += 1;                }                  // Break if an odd number                 // has occurred                else                    break;                                  j += 1;            }                  // If the series has at least             // three elements, then merge            if (count >= 3)               ans.add(e.get(0));              // Else, add all elements to the            // answer array            else            {                for(int ii : e)                     ans.add(ii);            }                              // Resetting the count and             // temp array            count = 0;            e.clear();            i = j;        }                      // If the element is odd, add         // it to the answer array        else        {            ans.add(arr[i]);            i += 1;        }    }    return ans;}          // Driver codepublic static void main(String[] args){      int []arr = { 2, 2, 2, 100, 5, 4,                   2, 9, 10, 88, 24 };                       Vector<Integer> ans = merge(arr);          System.out.print("[");    for(int i= 0; i < ans.size(); i++)    {        if (i == ans.size() - 1)            System.out.print(ans.get(i) + "]");        else            System.out.print(ans.get(i) + ", ");    }}}Â
// This code is contributed by Amit Katiyar |
Python3
# Python3 program to merge the array# as per the given conditionÂ
# Function to merge the array# as per the given conditiondef merge(arr):         # Variable to store the final    # sequence    ans = []Â
    # Temporary array to store the     # even numbers while traversing    e =[]     i = 0    j = 0    count = 0         # Iterating through the array    while i<len(arr):             # If the element is even        if(arr[i]% 2 == 0):            j = i                         # Iterating till an odd element            # is found            while j<len(arr):                                 # Keep appending into the                 # temporary array if the                 # even number is occurred                if arr[j]% 2 == 0:                                         e.append(arr[j])                    count+= 1Â
                # Break if an odd number                 # has occurred                else:                    break                                 j+= 1                 # If the series has at least             # three elements, then merge            if(count>= 3):                ans.append(e[0])Â
            # Else, add all elements to the            # answer array            else:                for i in e:                    ans.append(i)                             # Resetting the count and             # temp array            count = 0            e =[]            i = jÂ
        # If the element is odd, add         # it to the answer array        else:            ans.append(arr[i])            i+= 1                 return ans        # Driver codeif __name__ == "__main__":         arr = [2, 2, 2, 100, 5, 4, 2, 9, 10, 88, 24]         print(merge(arr)) |
C#
// C# program to merge the array// as per the given conditionusing System;using System.Collections.Generic;class GFG{  // Function to merge the array// as per the given conditionstatic List<int> merge(int []arr){  // Variable to store the final  // sequence  List<int> ans = new List<int>();Â
  // Temporary array to store the   // even numbers while traversing  List<int> e = new List<int>();Â
  int i = 0;  int j = 0;  int count = 0;Â
  // Iterating through the array  while (i < arr.Length)  {    // If the element is even    if (arr[i] % 2 == 0)    {      j = i;Â
      // Iterating till an odd element      // is found      while (j < arr.Length)      {        // Keep appending into the         // temporary array if the         // even number is occurred        if (arr[j] % 2 == 0)        {          e.Add(arr[j]);          count += 1;        }Â
        // Break if an odd number         // has occurred        else          break;Â
        j += 1;      }Â
      // If the series has at least       // three elements, then merge      if (count >= 3)        ans.Add(e[0]);Â
      // Else, add all elements to the      // answer array      else      {        foreach(int ii in e)          ans.Add(ii);      }Â
      // Resetting the count and       // temp array      count = 0;      e.Clear();      i = j;    }Â
    // If the element is odd, add     // it to the answer array    else    {      ans.Add(arr[i]);      i += 1;    }  }  return ans;}          // Driver codepublic static void Main(String[] args){  int []arr = {2, 2, 2, 100, 5, 4,                2, 9, 10, 88, 24};Â
  List<int> ans = merge(arr);  Console.Write("[");     for(int i= 0; i < ans.Count; i++)  {    if (i == ans.Count - 1)      Console.Write(ans[i] + "]");    else      Console.Write(ans[i] + ", ");  }}}Â
// This code is contributed by 29AjayKumar |
Javascript
class GFG{    // Function to merge the array    // as per the given condition    static merge(arr)    {             // Variable to store the final        // sequence        var ans = new Array();                 // Temporary array to store the        // even numbers while traversing        var e = new Array();        var i = 0;        var j = 0;        var count = 0;                 // Iterating through the array        while (i < arr.length)        {                     // If the element is even            if (arr[i] % 2 == 0)            {                j = i;                                 // Iterating till an odd element                // is found                while (j < arr.length)                {                                     // Keep appending into the                    // temporary array if the                    // even number is occurred                    if (arr[j] % 2 == 0)                    {                        (e.push(arr[j]) > 0);                        count += 1;                    }                    else                    {                        break;                    }                    j += 1;                }                                 // If the series has at least                // three elements, then merge                if (count >= 3)                {                    (ans.push(e[0]) > 0);                }                else                {                    for ( const ii of e) {(ans.push(ii) > 0);}                }                                 // Resetting the count and                // temp array                count = 0;                e = new Array();                i = j;            }            else            {                (ans.push(arr[i]) > 0);                i += 1;            }        }        return ans;    }         // Driver code    static main(args)    {        var arr = [2, 2, 2, 100, 5, 4, 2, 9, 10, 88, 24];        var ans = GFG.merge(arr);        console.log("[");        for (var i=0; i < ans.length; i++)        {            if (i == ans.length - 1)            {                console.log(ans[i] + "]");            }            else            {                console.log(ans[i] + ", ");            }        }    }}GFG.main([]);Â
// This code is contributed by aadityaburujwale. |
[2, 5, 4, 2, 9, 10]
Time Complexity: O(N2), where N is the length of the array.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
