Rearrange array such that all even-indexed elements in the Array is even

Given an array arr[], the task is to check if it is possible to rearrange the array in such a way that every even index(1-based indexing) contains an even number. If such a rearrangement is not possible, print “No”. Otherwise, print “Yes” and print a possible arrangement
Examples:
Input: arr[] = {2, 4, 8, 3, 1}
Output:
Yes
3 4 8 2 1
Input: arr[] = {3, 3, 11, 8}
Output: No
Explanation: Since, the array contains only one even element, all even indices cannot be filled with a even elements.
Approach:
Follow the steps below to solve the problem:
- Count the total number of even elements present in the given array. If the count exceeds the total number of even indices in the given array, print “No”.
- Otherwise, print “Yes”. Now, traverse the array using two pointers, i and j, pointing to even and odd indices respectively.
- For any ith index containing an odd element, iterate odd indices using j until an even element is encountered.
- Swap a[i] and a[j]
- Repeat the above steps until all even indices are filled with an even element.
Below is the implementation of the above approach:
C++
// C++ Program to implement// the above approach#include <bits/stdc++.h>using namespace std;// Function to check if it the// array can be rearranged such// such that every even indices// contains an even elementvoid checkPossible(int a[], int n){ // Stores the count of even elements int even_no_count = 0; // Traverse array to count even numbers for (int i = 0; i < n; i++) { if (a[i] % 2 == 0) even_no_count++; } // If even_no_count exceeds // count of even indices if (n / 2 > even_no_count) { cout << "No" << endl; return; } cout << "Yes" << endl; int j = 0; for (int i = 1; i < n; i += 2) { if (a[i] % 2 == 0) continue; else { while (j < n && a[j] % 2 != 0) j += 2; a[i] += a[j]; a[j] = a[i] - a[j]; a[i] -= a[j]; } } for (int i = 0; i < n; i++) { cout << a[i] << " "; }}// Driver Codeint main(){ int arr[] = { 2, 3, 4, 5, 6, 7 }; int n = sizeof(arr) / sizeof(arr[0]); checkPossible(arr, n); return 0;}// This code is contributed by gauravrajput1 |
Java
// Java Program to implement// the above approachimport java.io.*;import java.util.*;class GFG { // Function to check if it the // array can be rearranged such // such that every even indices // contains an even element static void checkPossible(int a[]) { // Stores the count of even elements int even_no_count = 0; // Traverse array to count even numbers for (int i = 0; i < a.length; i++) { if (a[i] % 2 == 0) even_no_count++; } // If even_no_count exceeds // count of even indices if (a.length / 2 > even_no_count) { System.out.println("No"); return; } System.out.println("Yes"); int j = 0; for (int i = 1; i < a.length; i += 2) { if (a[i] % 2 == 0) continue; else { while (j < a.length && a[j] % 2 != 0) j += 2; a[i] += a[j]; a[j] = a[i] - a[j]; a[i] -= a[j]; } } for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } // Driver Code public static void main(String args[]) { int arr[] = { 2, 3, 4, 5, 6, 7 }; checkPossible(arr); }} |
Python3
# Python3 program to implement# the above approach# Function to check if it the# array can be rearranged such# such that every even indices# contains an even elementdef checkPossible(a, n): # Stores the count of even elements even_no_count = 0 # Traverse array to count even numbers for i in range(n): if (a[i] % 2 == 0): even_no_count += 1 # If even_no_count exceeds # count of even indices if (n // 2 > even_no_count): print("No") return print("Yes") j = 0 for i in range(1, n, 2): if (a[i] % 2 == 0): continue else: while (j < n and a[j] % 2 != 0): j += 2 a[i] += a[j] a[j] = a[i] - a[j] a[i] -= a[j] for i in range(n): print(a[i], end = " ") # Driver Codearr = [ 2, 3, 4, 5, 6, 7 ]n = len(arr)checkPossible(arr, n)# This code is contributed by code_hunt |
C#
// C# Program to implement// the above approachusing System;class GFG{ // Function to check if it the // array can be rearranged such // such that every even indices // contains an even element static void checkPossible(int []a) { // Stores the count of even elements int even_no_count = 0; // Traverse array to count even numbers for (int i = 0; i < a.Length; i++) { if (a[i] % 2 == 0) even_no_count++; } // If even_no_count exceeds // count of even indices if (a.Length / 2 > even_no_count) { Console.WriteLine("No"); return; } Console.WriteLine("Yes"); int j = 0; for (int i = 1; i < a.Length; i += 2) { if (a[i] % 2 == 0) continue; else { while (j < a.Length && a[j] % 2 != 0) j += 2; a[i] += a[j]; a[j] = a[i] - a[j]; a[i] -= a[j]; } } for (int i = 0; i < a.Length; i++) { Console.Write(a[i] + " "); } } // Driver Code public static void Main(String []args) { int []arr = { 2, 3, 4, 5, 6, 7 }; checkPossible(arr); }}// This code is contributed by Rajput-Ji |
Javascript
<script>// Java Script Program to implement// the above approach // Function to check if it the // array can be rearranged such // such that every even indices // contains an even element function checkPossible(a) { // Stores the count of even elements let even_no_count = 0; // Traverse array to count even numbers for (let i = 0; i < a.length; i++) { if (a[i] % 2 == 0) even_no_count++; } // If even_no_count exceeds // count of even indices if (a.length / 2 > even_no_count) { document.write("No<br>"); return; } document.write("Yes<br>"); let j = 0; for (let i = 1; i < a.length; i += 2) { if (a[i] % 2 == 0) continue; else { while (j < a.length && a[j] % 2 != 0) j += 2; a[i] += a[j]; a[j] = a[i] - a[j]; a[i] -= a[j]; } } for (let i = 0; i < a.length; i++) { document.write(a[i] + " "); } } // Driver Code let arr = [ 2, 3, 4, 5, 6, 7 ]; checkPossible(arr);// This code is contributed by sravan kumar Gottumukkala</script> |
Yes 3 2 5 4 7 6
Time Complexity: O(N), as we are using a loop to traverse N times.
Auxiliary Space: O(1), as we are not using any extra space.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



