Rearrange array elements into alternate even-odd sequence by anticlockwise rotation of digits
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:
C++
#include <bits/stdc++.h>
using namespace std;
bool is_possible(vector< int >& arr, bool check)
{
bool exists = true ;
vector< int > cpy = arr;
bool flag;
for ( int i = 0; i < arr.size(); i++) {
if (arr[i] % 2 == check) {
check = !(check);
continue ;
}
flag = false ;
string strEle = to_string(arr[i]);
for ( int j = 0; j < strEle.size(); j++) {
if ( int (strEle[j]) % 2 == check) {
arr[i] = stoi(strEle.substr(j + 1)
+ strEle.substr(0, j + 1));
flag = true ;
break ;
}
}
if (flag == false ) {
exists = false ;
break ;
}
check = !(check);
}
if (!exists) {
arr = cpy;
return false ;
}
else
return true ;
}
void convert_arr(vector< int >& arr)
{
if (is_possible(arr, 0)) {
for ( auto & i : arr)
cout << i << " " ;
}
else if (is_possible(arr, 1)) {
for ( auto & i : arr)
cout << i << " " ;
}
else
cout << "-1" << endl;
}
int main()
{
vector< int > arr = { 143, 251, 534, 232, 854 };
convert_arr(arr);
}
|
Java
import java.io.*;
import java.lang.*;
import java.util.*;
class GFG {
static boolean is_possible( int arr[], int check)
{
boolean exists = true ;
int cpy[] = arr.clone();
boolean flag;
for ( int i = 0 ; i < arr.length; i++) {
if (arr[i] % 2 == check) {
check = (check == 0 ? 1 : 0 );
continue ;
}
flag = false ;
String strEle = Integer.toString(arr[i]);
for ( int j = 0 ; j < strEle.length(); j++) {
if ((strEle.charAt(j) - '0' ) % 2 == check) {
arr[i] = Integer.parseInt(
strEle.substring(j + 1 )
+ strEle.substring( 0 , j + 1 ));
flag = true ;
break ;
}
}
if (flag == false ) {
exists = false ;
break ;
}
check = (check == 0 ? 1 : 0 );
}
if (!exists) {
arr = cpy;
return false ;
}
else
return true ;
}
static void convert_arr( int arr[])
{
if (is_possible(arr, 0 )) {
for ( int v : arr) {
System.out.print(v + " " );
}
}
else if (is_possible(arr, 1 )) {
for ( int v : arr) {
System.out.print(v + " " );
}
}
else
System.out.println(- 1 );
}
public static void main(String[] args)
{
int arr[] = { 143 , 251 , 534 , 232 , 854 };
convert_arr(arr);
}
}
|
Python3
def is_possible(arr, check):
exists = True
cpy = arr
for i in range ( len (arr)):
if (arr[i] % 2 = = check):
check = not (check)
continue
flag = False
strEle = str (arr[i])
for j in range ( len (strEle)):
if int (strEle[j]) % 2 = = check:
arr[i] = int (strEle[j + 1 :] + strEle[:j + 1 ])
flag = True
break
if flag = = False :
exists = False
break
check = not (check)
if not exists:
arr = cpy
return False
else :
return True
def convert_arr(arr):
if (is_possible(arr, 0 )):
print ( * arr)
elif (is_possible(arr, 1 )):
print ( * arr)
else :
print ( - 1 )
if __name__ = = '__main__' :
arr = [ 143 , 251 , 534 , 232 , 854 ]
convert_arr(arr)
|
C#
using System;
using System.Collections.Generic;
class GFG{
static bool ispossible(List< int > arr, bool check)
{
bool exists = true ;
List< int > cpy = arr;
bool flag;
for ( int i=0;i<arr.Count;i++) {
int temp = check ? 1 : 0;
if (arr[i] % 2 == temp) {
check = !(check);
continue ;
}
flag = false ;
int p = arr[i];
string strEle = p.ToString();
for ( int j = 0; j < strEle.Length; j++) {
temp = check ? 1 : 0;
if (( int )(strEle[j] - '0' )% 2 == temp) {
string s = strEle.Substring(j + 1) + strEle.Substring(0, j + 1);
arr[i] = Int32.Parse(s);
flag = true ;
break ;
}
}
if (flag == false ) {
exists = false ;
break ;
}
check = !(check);
}
if (exists== false ) {
arr = cpy;
return false ;
}
else
return true ;
}
static void convert_arr(List< int > arr)
{
if (ispossible(arr, false )) {
foreach ( int i in arr)
Console.Write(i + " " );
}
else if (ispossible(arr, true )) {
foreach ( int i in arr)
Console.Write(i + " " );
}
else
Console.Write( "-1" );
}
public static void Main()
{
List< int > arr = new List< int >(){143, 251, 534, 232, 854};
convert_arr(arr);
}
}
|
Javascript
<script>
function is_possible(arr,check)
{
let exists = true ;
let cpy = arr;
let flag;
for (let i = 0; i < arr.length; i++) {
if (arr[i] % 2 == check) {
check = !(check);
continue ;
}
flag = false ;
let strEle = arr[i].toString();
for (let j = 0; j < strEle.length; j++) {
if (strEle[j].charCodeAt() % 2 == check) {
arr[i] = parseInt(strEle.substr(j + 1)
+ strEle.substr(0, j + 1));
flag = true ;
break ;
}
}
if (flag == false ) {
exists = false ;
break ;
}
check = !(check);
}
if (!exists) {
arr = cpy;
return false ;
}
else
return true ;
}
function convert_arr(arr)
{
if (is_possible(arr, 0)) {
for (let i = 0; i < arr.length; i++)
document.write(arr[i] + " " );
}
else if (is_possible(arr, 1)) {
for (let i = 0; i < arr.length; i++)
document.write(arr[i] + " " );
}
else
document.write( "-1" );
}
let arr = [ 143, 251, 534, 232, 854 ];
convert_arr(arr);
</script>
|
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.
Last Updated :
31 May, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...