Open in App
Not now

Modify an array by sorting after reversal of bits of each array element

• Difficulty Level : Medium
• 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 ` `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

 ``

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

Output:

`33 35 53 101`

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

My Personal Notes arrow_drop_up
Related Articles