-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPairsXOR.py
65 lines (54 loc) · 1.33 KB
/
PairsXOR.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
'''
count number of pairs such that a^b = B
A = [5, 4, 10, 15, 7, 6] (distinct integers)
B = 5
o/p : cnt = 1(10^15 = 5)
A = [3, 6, 8, 10, 15, 50]
B = 5
o/p : cnt = 2 ((3 ^ 6) = 5 , (10 ^ 15) = 5 )
'''
class Solution:
# @param A : list of integers
# @param B : integer
# @return an integer
'''
a ^ b = B
b ^ (a ^ b) = B ^ b
a = B ^ b
'''
def solve(self, A, B):
cnt = 0
# TC - O(N2)
# for i in range(len(A)):
# for j in range(i+1,len(A)):
# if A[i] ^ A[j] == B:
# cnt += 1
# return cnt
# TC - O(N2)
# for i in A:
# if i^B in A:
# cnt += 1
# A.remove(i^B)
# return cnt
# TC - O(N2)
# for i in A:
# duplicate = i^B
# if duplicate in A:
# cnt += 1
# return cnt //2
s = set(A)
# TC - O(NlogN)
# for i in s:
# duplicate = i ^B
# if duplicate in s:
# # s.remove(duplicate)
# cnt += 1
# return cnt//2
# TC - O(NlogN)
for i in A: # TC - O(N)
duplicate = i ^ B
if duplicate in s: # TC - O(logN)
cnt += 1
else:
s.add(i)
return cnt//2