在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