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:
- Traverse the array arr[] and convert each array element to their equivalent binary representation and store it in the form of a binary string.
- Reverse these binary strings and convert the reversed binary string to equivalent decimal.
- Sort the modified array.
- Print the sorted array.
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; } |
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 DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.