Given the numbers a and k, the task is to find the k’th smallest value for b such that a + b = a | b, where ‘|’ denotes the bitwise OR operator. The maximum value of a and k can be .
Input: a = 10, k = 3 Output: 5 Numbers satisfying the condition 5 + b = 5 | b are 1, 4, 5, etc. Since 3rd smallest value for b is required, hence b = 5. Input: a = 1, k = 1 Output: 2 Numbers satisfying the condition 1 + b = 1 | b are 2, 4, 6, etc. Since 1st smallest value for b is required, hence b = 2.
- b is a solution of the given equation if and only if b has 0 in all positions where a has 1 (in binary notation).
- So, we need to determine the bit of b for positions where a has 0. Let, if a = 10100001 then the last eight digits of b must be b = 0*0****0, where ‘*’ denotes either 0 or 1. Any replacement of all ‘*’ by 0 or 1 gives us a solution.
- The k-th smallest number will be received by replacing all ‘*’ in y by digits of the binary representation of the number k.
- As the maximum value of a and k is , so checking up to 32 positions in binary representation is enough to get the correct answer for the given equation.
Below is the implementation of the above approach:
Time Complexity: O(N)
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. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.
In case you wish to attend live classes with industry experts, please refer Geeks Classes Live