Java Program to Rearrange array elements into alternate even-odd sequence by anticlockwise rotation of digits
Last Updated :
31 May, 2022
Given an array arr[] consisting of N positive integers, the task is to rotate the digits of array elements in an anti-clockwise direction such that elements of the array elements are in alternate even-odd or odd-even form. If multiple solutions exists, then print any one of them. Otherwise, print -1.
Examples:
Input: arr[] = { 143, 251, 534, 232, 854 }
Output: 143 512 345 232 485
Explanation:
Rotating arr[1] by 1 in anticlockwise direction modifies arr[1] to 512.
Rotating arr[2] by 1 in anticlockwise direction modifies arr[2] to 345.
Rotating arr[4] by 2 in anticlockwise direction modifies arr[4] to 485.
Input: arr[] = { 44, 23, 21, 33, 14 }
Output: 44 23 12 33 14
Approach: The above problem can be solved by either modifying the first array element to an odd number or an even number. The array element can be modified by converting the number into a string and then rotate the characters of the string left as needed. Follow the steps below to solve the problem:
- Rearrange the first array element as an even number and check if the remaining array elements can be rearranged into odd-even alternately or not. If found to be true, then rearrange the array elements into odd-even alternately and print the array elements.
- Otherwise, rearrange the first array element as an odd number and check if the remaining array elements can be rearranged into even-odd alternately or not. If found to be true, then rearrange the remaining array elements into even-odd alternately and print the array elements.
- Otherwise, print -1.
Below is the implementation of the above approach:
Java
// java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
class GFG {
// Utility function to rotate the digits of
// array elements such that array elements are
// in placed even-odd or odd-even alternately
static boolean is_possible(int arr[], int check)
{
// Checks if array can be converted
// into even-odd or odd-even form
boolean exists = true;
// Store array elements
int cpy[] = arr.clone();
boolean flag;
// Traverse the array
for (int i = 0; i < arr.length; i++) {
// Check if arr[i] is already
// at correct position
if (arr[i] % 2 == check) {
// Changes the
// parity of check
check = (check == 0 ? 1 : 0);
continue;
}
// Checks if it is possible
// to modify the number arr[i]
// by rotating the digits of
// the number anticlockwise
flag = false;
// Stores the number arr[i] as
// string
String strEle = Integer.toString(arr[i]);
// Traverse over the digits of
// the current element
for (int j = 0; j < strEle.length(); j++) {
// Checks if parity of check and
// current digit is same or not
if ((strEle.charAt(j) - '0') % 2 == check) {
// Rotates the string by j + 1 times
// in anticlockwise
arr[i] = Integer.parseInt(
strEle.substring(j + 1)
+ strEle.substring(0, j + 1));
// Marks the flag
// as true and break
flag = true;
break;
}
}
// If flag is false
if (flag == false) {
// Update exists
exists = false;
break;
}
// Changes the
// parity of check
check = (check == 0 ? 1 : 0);
}
// Checks if arr[] cannot be
// modified, then returns false
if (!exists) {
arr = cpy;
return false;
}
// Otherwise, return true
else
return true;
}
// Function to rotate the digits of array
// elements such that array elements are
// in the form of even-odd or odd-even form
static void convert_arr(int arr[])
{
// If array elements can be arranged
// in even-odd manner alternately
if (is_possible(arr, 0)) {
for (int v : arr) {
System.out.print(v + " ");
}
}
// If array elements can be arranged
// in odd-even manner alternately
else if (is_possible(arr, 1)) {
for (int v : arr) {
System.out.print(v + " ");
}
}
// Otherwise, prints -1
else
System.out.println(-1);
}
// Driver code
public static void main(String[] args)
{
// Given array
int arr[] = { 143, 251, 534, 232, 854 };
// FUnction call
convert_arr(arr);
}
}
// This code is contributed by Kingash.
Output: 314 251 534 223 854
Time Complexity: O(N), as we are using a loop to traverse N times.
Auxiliary Space: O(N), as we are using extra space for cpy.
Please refer complete article on Rearrange array elements into alternate even-odd sequence by anticlockwise rotation of digits for more details!
Similar Reads
Java Program to Store Even & Odd Elements of an Array into Separate Arrays Given an array with N numbers and separate those numbers into two arrays by odd numbers or even numbers. The complete operation required O(n) time complexity in the best case. For optimizing the memory uses, the first traverse through an array and calculate the total number of even and odd numbers i
2 min read
Java Program to Check if all array elements can be converted to pronic numbers by rotating digits Given an array arr[] of size N, the task is to check if it is possible to convert all of the array elements to a pronic number by rotating the digits of array elements any number of times. Examples: Input: {321, 402, 246, 299} Output: True Explanation: arr[0] ? Right rotation once modifies arr[0] to
3 min read
Java Program to Left Rotate the Elements of an Array In Java, left rotation of an array involves shifting its elements to the left by a given number of positions, with the first elements moving around to the end. There are different ways to left rotate the elements of an array in Java.Example: We can use a temporary array to rotate the array left by "
5 min read
Java Program for Reversal algorithm for right rotation of an array Given an array, right rotate it by k elements. After K=3 rotation Examples: Input: arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} k = 3 Output: 8 9 10 1 2 3 4 5 6 7 Input: arr[] = {121, 232, 33, 43 ,5} k = 2 Output: 43 5 121 232 33 Note : In the below solution, k is assumed to be smaller than or equal to n
2 min read
Java Program to Count rotations required to sort given array in non-increasing order Given an array arr[] consisting of N integers, the task is to sort the array in non-increasing order by minimum number of anti-clockwise rotations. If it is not possible to sort the array, then print "-1". Otherwise, print the count of rotations. Examples: Input: arr[] = {2, 1, 5, 4, 3}Output: 2Expl
3 min read