Merge the elements in subarray of all even elements of the Array
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); } // 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 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); } // 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 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) # 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 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); } // 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 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 |
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.
Contact Us