Given an array arr[] of measurement N and an integer Okay, the duty is to invert the 0 bit (unset bit) of any integer of given array whole Okay instances, such that the general sum of arr will get minimized.
Examples:
Enter: arr = {3, 7, 3}, Okay = 2
Output: 21
Rationalization: Binary illustration 3 is 11, and seven is 111.
Since we have to set 2 bits, we will set the bottom unset bits
of the 2 3s such that they grow to be 111.
The full sum is then 7 + 7 + 7 = 21.Enter: arr = {2, 3, 4}, Okay = 2
Output: 11
An Strategy utilizing a Grasping algorithm:
The concept of fixing this downside may be executed by utilizing the grasping approach. We are going to change the rightmost 0s to 1s.
Comply with the steps beneath to implement the above concept:
- Iterate over the weather of the array.
- Convert the aspect into its binary illustration and iterate over the bits of binary illustration.
- Verify for its ith bit is unset or not.
- If the ith bit is unset then, Push the ith place into the array smallestUnsetBit.
- Verify for its ith bit is unset or not.
- Type the smallestUnsetBit array.
- Iterate over the smallestUnsetBit for Okay time and calculate the worth for smallestUnsetBit[i] by 2smallestUnsetBit[i], this worth will contribute into the general sum after inverting smallestUnsetBit[i] bit.
- Return the outcome.
Under is the implementation of the above strategy:
C++
|
Time Complexity: O(N), the place N is the size of the given array
Auxiliary Area: O(N)