Skip to content
Related Articles

Related Articles

Improve Article
Merge the elements in subarray of all even elements of the Array
  • Last Updated : 25 Sep, 2020

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 condition
vector<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);
            }
                 
            // Reseting 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 code
int 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 condition
import java.util.*;
  
class GFG{
  
// Function to merge the array
// as per the given condition
static 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);
            }
                  
            // Reseting 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 code
public 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 condition
def 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)
                 
            # Reseting 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 code
if __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 condition
using System;
using System.Collections.Generic;
class GFG{
  
// Function to merge the array
// as per the given condition
static 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);
      }
 
      // Reseting 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 code
public 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
Output: 



[2, 5, 4, 2, 9, 10]



Time Complexity: O(N2), where N is the length of the array.

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
Recommended Articles
Page :