Given an array arr of dimension N and an integer Okay, the duty is to search out the depend of all of the ordered pairs (i, j) the place i != j, such that ((arr[i] ⊕ arr[j]) & Okay) = 0. The ⊕ represents bitwise XOR and & represents bitwise AND.
Enter: arr = [1, 2, 3, 4, 5], Okay = 3
Rationalization: There are 2 pairs satisfying the situation.
These pairs are: (1, 5) and (5, 1)
Enter: arr = [5, 9, 24], Okay = 7
Rationalization: No such pair satisfying the situation exists.
Strategy: The given drawback could be solved with the assistance of the next concept:
Utilizing distributive property, we will write ((arr[i] ⊕ arr[j]) & Okay) = ((arr[i] & Okay) ⊕ (arr[j] & Okay)).
Since for ((arr[i] & Okay) ⊕ (arr[j] & Okay)) = 0, these two phrases (arr[i] & Okay) and (arr[j] & Okay) should be equal.
Observe the under steps to unravel the issue:
- Create a map and a solution variable (say Res = 0).
- Traverse the array and insert (arr[i] & Okay) to map with its depend.
- Now, traverse the map and for every entry if there are X such occurrences then doable pairs = X*(X-1). So add that to the worth Res.
- Return Res because the required reply.
Under is the implementation of the above method:
Time Complexity: O(N)
Auxiliary Area: O(N)