在Python中找到与整数数组的每个数字进行XOR运算时得出最小和的数字
假设我们有一个数组A,我们必须找到一个数字X,使得(A[0]XORX)+(A[1]XORX)+…+A[n–1]XORX尽可能最小。
因此,如果输入类似于[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+(XXORarr[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