Skip to content
Related Articles

Related Articles

Modify an array by sorting after reversal of bits of each array element
  • Difficulty Level : Medium
  • Last Updated : 13 Apr, 2021

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;
}

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
Output: 
33 35 53 101

 

Time Complexity: O(NlogN)
Auxiliary Space: O(log2M), where M denotes the maximum element present in the array.

 

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up
Recommended Articles
Page :