假设我们有一个数组A,我们必须找到一个数字X,使得(A [0] XOR X)+(A [1] XOR X)+…+ A [n – 1] XOR X尽可能最小。
因此,如果输入类似于[3、4、5、6、7],则输出将为X = 7,Sum = 10
为了解决这个问题,我们将遵循以下步骤-
定义一个函数search_res()。这将花费arr,n
元素:= arr [0]
对于范围在0到arr大小之间的i,执行
元素:= arr [i]
如果arr [i]>元素,则
p:=(以2为底的对数的整数)+ 1的整数
X:= 0
对于i在0到p范围内,
X:= X +(2 ^ i)
如果arr [j] AND(2 ^ i)不为零,则
cnt:= cnt + 1
cnt:= 0
对于0到n范围内的j,执行
如果cnt>(n / 2)的整数部分不为零,则
和:= 0
对于0到n范围内的i,执行
sum:= sum +(X XOR arr [i])
返回X和
让我们看下面的实现以更好地理解-
from math import log2 def search_res(arr, n): element = arr[0] for i in range(len(arr)): if(arr[i] > element): element = arr[i] p = int(log2(element)) + 1 X = 0 for i in range(p): cnt = 0 for j in range(n): if (arr[j] & (1 << i)): cnt += 1 if (cnt > int(n / 2)): X += 1 << i sum = 0 for i in range(n): sum += (X ^ arr[i]) print("X =", X, ", Sum =", sum) arr = [3, 4, 5, 6, 7] n = len(arr) search_res(arr, n)
[3, 4, 5, 6, 7]
输出结果
X = 7 , Sum = 10