Modify an array by sorting after reversal of bits of each array element
Last Updated :
19 Jan, 2023
Given an array arr[] consisting of N integers, the task is to modify the array by replacing each array element with the number obtained by reversing their respective binary representations and sort the modified array.
Examples:
Input: arr[ ] = {43, 422, 132}
Output: 33 53 203
Explanation:
The binary representation of the array elements are {101011, 110100110, 10000100}.
Reversed binary representations are {110101, 011001011, 0010000}.
Equivalent numeric values of the reversed binary representations are {53, 203, 33}.
Sorted order of these elements are {33, 53, 203}.
Input: arr[ ] ={ 98, 43, 66, 83}
Output: 33 35 53 101
Approach: Follow the steps below to solve the problem:
Below is the implementation of the above approach:
C++14
// C++ implementation of
// the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to convert binary
// number to equivalent decimal
int binaryToDecimal(string n)
{
string num = n;
int dec_value = 0;
// Set base value to 1, i.e 2^0
int base = 1;
int len = num.length();
for (int i = len - 1; i >= 0; i--) {
if (num[i] == '1')
dec_value += base;
base = base * 2;
}
return dec_value;
}
// Function to convert a decimal
// to equivalent binary representation
string decimalToBinary(int n)
{
// Stores the binary representation
string binstr = "";
while (n > 0) {
// Since ASCII value of
// '0', '1' are 48 and 49
binstr += (n % 2 + 48);
n = n / 2;
}
// As the string is already reversed,
// no further reversal is required
return binstr;
}
// Function to convert the reversed binary
// representation to equivalent integer
int reversedBinaryDecimal(int N)
{
// Stores reversed binary
// representation of given decimal
string decimal_to_binar
= decimalToBinary(N);
// Stores equivalent decimal
// value of the binary representation
int binary_to_decimal
= binaryToDecimal(decimal_to_binar);
// Return the resultant integer
return binary_to_decimal;
}
// Utility function to print the sorted array
void printSortedArray(int arr[], int size)
{
// Sort the array
sort(arr, arr + size);
// Traverse the array
for (int i = 0; i < size; i++)
// Print the array elements
cout << arr[i] << " ";
cout << endl;
}
// Utility function to reverse the
// binary representations of all
// array elements and sort the modified array
void modifyArray(int arr[], int size)
{
// Traverse the array
for (int i = 0; i < size; i++) {
// Passing array elements to
// reversedBinaryDecimal function
arr[i] = reversedBinaryDecimal(
arr[i]);
}
// Pass the array to
// the sorted array
printSortedArray(arr, size);
}
// Driver Code
int main()
{
int arr[] = { 98, 43, 66, 83 };
int n = sizeof(arr) / sizeof(arr[0]);
modifyArray(arr, n);
return 0;
}
Java
// Java implementation of
// the above approach
import java.io.*;
import java.util.*;
class GFG{
// Function to convert binary
// number to equivalent decimal
static int binaryToDecimal(String n)
{
String num = n;
int dec_value = 0;
// Set base value to 1, i.e 2^0
int base = 1;
int len = num.length();
for(int i = len - 1; i >= 0; i--)
{
if (num.charAt(i) == '1')
dec_value += base;
base = base * 2;
}
return dec_value;
}
// Function to convert a decimal
// to equivalent binary representation
static String decimalToBinary(int n)
{
// Stores the binary representation
String binstr = "";
while (n > 0)
{
// Since ASCII value of
// '0', '1' are 48 and 49
binstr += (char)(n % 2 + 48);
n = n / 2;
}
// As the string is already reversed,
// no further reversal is required
return binstr;
}
// Function to convert the reversed binary
// representation to equivalent integer
static int reversedBinaryDecimal(int N)
{
// Stores reversed binary
// representation of given decimal
String decimal_to_binar = decimalToBinary(N);
// Stores equivalent decimal
// value of the binary representation
int binary_to_decimal = binaryToDecimal(
decimal_to_binar);
// Return the resultant integer
return binary_to_decimal;
}
// Utility function to print the sorted array
static void printSortedArray(int arr[], int size)
{
// Sort the array
Arrays.sort(arr);
// Traverse the array
for(int i = 0; i < size; i++)
// Print the array elements
System.out.print(arr[i] + " ");
System.out.println();
}
// Utility function to reverse the
// binary representations of all
// array elements and sort the modified array
static void modifyArray(int arr[], int size)
{
// Traverse the array
for(int i = 0; i < size; i++)
{
// Passing array elements to
// reversedBinaryDecimal function
arr[i] = reversedBinaryDecimal(arr[i]);
}
// Pass the array to
// the sorted array
printSortedArray(arr, size);
}
// Driver Code
public static void main(String[] args)
{
int arr[] = { 98, 43, 66, 83 };
int n = arr.length;
modifyArray(arr, n);
}
}
// This code is contributed by rag2127
Python3
# Python3 implementation of
# the above approach
# Function to convert binary
# number to equivalent decimal
def binaryToDecimal(n):
num = n
dec_value = 0
# Set base value to 1, i.e 2^0
base = 1
length = len(num)
for i in range(length - 1, -1, -1):
if (num[i] == '1'):
dec_value += base
base = base * 2
return dec_value
# Function to convert a decimal
# to equivalent binary representation
def decimalToBinary(n):
# Stores the binary representation
binstr = ""
while (n > 0):
# Since ASCII value of
# '0', '1' are 48 and 49
binstr += chr(n % 2 + 48)
n = n // 2
# As the string is already reversed,
# no further reversal is required
return binstr
# Function to convert the reversed binary
# representation to equivalent integer
def reversedBinaryDecimal(N):
# Stores reversed binary
# representation of given decimal
decimal_to_binar = decimalToBinary(N)
# Stores equivalent decimal
# value of the binary representation
binary_to_decimal = binaryToDecimal(
decimal_to_binar)
# Return the resultant integer
return binary_to_decimal
# Utility function to print the sorted array
def printSortedArray(arr, size):
# Sort the array
arr.sort()
# Traverse the array
for i in range(size):
# Print the array elements
print(arr[i], end=" ")
print()
# Utility function to reverse the
# binary representations of all
# array elements and sort the modified array
def modifyArray(arr, size):
# Traverse the array
for i in range(size):
# Passing array elements to
# reversedBinaryDecimal function
arr[i] = reversedBinaryDecimal(arr[i])
# Pass the array to
# the sorted array
printSortedArray(arr, size)
# Driver Code
if __name__ == "__main__":
arr = [ 98, 43, 66, 83 ]
n = len(arr)
modifyArray(arr, n)
# This code is contributed by ukasp
JavaScript
<script>
// Javascript implementation of
// the above approach
// Function to convert binary
// number to equivalent decimal
function binaryToDecimal(n)
{
let num = n;
let dec_value = 0;
// Set base value to 1, i.e 2^0
let base = 1;
let len = num.length;
for(let i = len - 1; i >= 0; i--)
{
if (num[i] == '1')
dec_value += base;
base = base * 2;
}
return dec_value;
}
// Function to convert a decimal
// to equivalent binary representation
function decimalToBinary(n)
{
// Stores the binary representation
let binstr = "";
while (n > 0)
{
// Since ASCII value of
// '0', '1' are 48 and 49
binstr += String.fromCharCode(n % 2 + 48);
n = Math.floor(n / 2);
}
// As the string is already reversed,
// no further reversal is required
return binstr;
}
// Function to convert the reversed binary
// representation to equivalent integer
function reversedBinaryDecimal(N)
{
// Stores reversed binary
// representation of given decimal
let decimal_to_binar = decimalToBinary(N);
// Stores equivalent decimal
// value of the binary representation
let binary_to_decimal = binaryToDecimal(
decimal_to_binar);
// Return the resultant integer
return binary_to_decimal;
}
// Utility function to print the sorted array
function printSortedArray(arr, size)
{
// Sort the array
arr.sort(function(a, b){return a - b;});
// Traverse the array
for(let i = 0; i < size; i++)
// Print the array elements
document.write(arr[i] + " ");
document.write("<br>")
}
// Utility function to reverse the
// binary representations of all
// array elements and sort the modified array
function modifyArray(arr, size)
{
// Traverse the array
for(let i = 0; i < size; i++)
{
// Passing array elements to
// reversedBinaryDecimal function
arr[i] = reversedBinaryDecimal(
arr[i]);
}
// Pass the array to
// the sorted array
printSortedArray(arr, size);
}
// Driver Code
let arr = [ 98, 43, 66, 83 ];
let n = arr.length;
modifyArray(arr, n);
// This code is contributed by avanitrachhadiya2155
</script>
C#
using System;
using System.Linq;
class GFG
{
// Function to convert binary
// number to equivalent decimal
static int BinaryToDecimal(string n)
{
string num = n;
int dec_value = 0;
// Set base1 value to 1, i.e 2^0
int base1 = 1;
int len = num.Length;
for (int i = len - 1; i >= 0; i--)
{
if (num[i] == '1')
dec_value += base1;
base1 = base1 * 2;
}
return dec_value;
}
// Function to convert a decimal
// to equivalent binary representation
static string DecimalToBinary(int n)
{
// Stores the binary representation
string binstr = "";
while (n > 0)
{
// Since ASCII value of
// '0', '1' are 48 and 49
binstr += (char)(n % 2 + 48);
n = n / 2;
}
// As the string is already reversed,
// no further reversal is required
return new string(binstr.ToArray());
}
// Function to convert the reversed binary
// representation to equivalent integer
static int ReversedBinaryDecimal(int N)
{
// Stores reversed binary
// representation of given decimal
string decimal_to_binar = DecimalToBinary(N);
// Stores equivalent decimal
// value of the binary representation
int binary_to_decimal = BinaryToDecimal(
decimal_to_binar);
// Return the resultant integer
return binary_to_decimal;
}
// Utility function to print the sorted array
static void PrintSortedArray(int[] arr, int size)
{
// Sort the array
Array.Sort(arr);
// Traverse the array
for (int i = 0; i < size; i++)
// Print the array elements
Console.Write(arr[i] + " ");
Console.WriteLine();
}
// Utility function to reverse the
// binary representations of all
// array elements and sort the modified array
static void ModifyArray(int[] arr, int size)
{
// Traverse the array
for (int i = 0; i < size; i++)
{
// Passing array elements to
// ReversedBinaryDecimal function
arr[i] = ReversedBinaryDecimal(arr[i]);
}
// Pass the array to
// the sorted array
PrintSortedArray(arr, size);
}
// Driver Code
public static void Main(string[] args)
{
int[] arr = { 98, 43, 66, 83 };
int n = arr.Length;
ModifyArray(arr, n);
}
}
Time Complexity: O(NlogN)
Auxiliary Space: O(log2M), where M denotes the maximum element present in the array.
Similar Reads
Count remaining array elements after reversing binary representation of each array element Given an array arr[] consisting of N positive integers, the task is to modify every array element by reversing them binary representation and count the number of elements in the modified array that were also present in the original array. Examples: Input: arr[] = {2, 4, 5, 20, 16} Output: 2Explanati
8 min read
Sort an array by left shifting digits of array elements Given an array arr[] consisting of N positive integers, the task is to left-shift the digits of array elements such that the array modifies to a sorted form. If multiple solutions exist, then print any one of them. Otherwise, print -1. Examples: Input: arr[] = { 511, 321, 323, 432 } Output: { 115, 1
8 min read
Convert an array into Bitonic array by right shifting array elements Giver an array arr[] consisting of N integers, the task is to perform right shift operations on array elements to convert the given array into a bitonic array. Examples: Input: arr[] = {7, 3, 4, 5, 3}Output: 56 96 128 80 48Explanation:Perform the operation on the array elements as: 7 ? 00000111 ? 3
11 min read
Print the Array formed by reversing the given Array after each index Given an array arr[], the task is to print the array formed by traversing given array from first to the last index by flipping the whole array after printing every element. Example: Input: arr = {0, 1, 2, 3, 4, 5} Output: 0 4 2 2 4 0Explanation: On 1st iteration element on index 0 -> 0 is printed
6 min read
Check if array can be sorted by swapping adjacent elements of opposite parity Given an array A of size n, the task is to check if the array can be sorted in increasing order, if the only operation allowed is swapping the adjacent elements if they are of opposite parity. The operation can be done any number of times. Examples: Input : n = 4, A = [1, 6, 51, 16]Output: YESExplan
9 min read
Check if array can be sorted by swapping pairs with GCD of set bits count equal to that of the smallest array element Given an array arr[] consisting of N integers, the task is to check if it is possible to sort the array using the following swap operations: Swapping of two numbers is valid only if the Greatest Common Divisor of count of set bits of the two numbers is equal to the number of set bits in the smallest
9 min read