
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Find N Distinct Numbers Whose Bitwise OR is Equal to K in Python
Suppose we have two integers N and K; we have to find N unique values whose bit-wise OR is same as K. If there is no such result, then return -1
So, if the input is like N = 4 and K = 6, then the output will be [6,0,1,2].
To solve this, we will follow these steps −
MAX := 32
visited := a list of size MAX and fill with False
res := a new list
Define a function add() . This will take num
point := 0
value := 0
-
for i in range 0 to MAX, do
-
if visited[i] is non-zero, then
go for next iteration
-
otherwise,
-
if num AND 1 is non-zero, then
value := value +(2^i)
num := num/2 (take only integer part)
-
-
insert value at the end of res
From the main method, do the following −
pow2 := an array of power of 2 from 2^0 to 2^31
insert k at the end of res
cnt_k := number of bits in k
-
if pow2[cnt_k] < n, then
return -1
count := 0
-
for i in range 0 to pow2[cnt_k] - 1, do
add(i)
count := count + 1
-
if count is same as n, then
come out from the loop
return res
Example
Let us see the following implementation to get better understanding −
MAX = 32 visited = [False for i in range(MAX)] res = [] def set_bit_count(n): if (n == 0): return 0 else: return (n & 1) + set_bit_count(n >> 1) def add(num): point = 0 value = 0 for i in range(MAX): if (visited[i]): continue else: if (num & 1): value += (1 << i) num = num//2 res.append(value) def solve(n, k): pow2 = [2**i for i in range(MAX)] res.append(k) cnt_k = set_bit_count(k) if (pow2[cnt_k] < n): return -1 count = 0 for i in range(pow2[cnt_k] - 1): add(i) count += 1 if (count == n): break return res n = 4 k = 6 print(solve(n, k))
Input
4, 6
Output
[6, 0, 1, 2]