在 Python 中,找到一个数字,当与整数数组中的每个数字进行异或时,其和最小

pythonserver side programmingprogramming更新于 2025/10/17 16:12:17

假设我们有一个数组 A,我们必须找到一个数字 X,使得 (A[0] XOR X) + (A[1] XOR X) + … + A[n – 1] XOR X 尽可能小。

因此,如果输入为 [3, 4, 5, 6, 7],则输出将是 X = 7 ,和 = 10

为了解决这个问题,我们将遵循以下步骤 −

  • 定义一个函数 search_res() 。这将需要 arr, n
  • element := arr[0]
  • 对于 i 在 0 到 arr 大小的范围内,执行
    • 如果 arr[i] >元素,则
      • 元素 := arr[i]
  • p := (元素底数为 2 的对数) + 1 的整数
  • X := 0
  • 对于范围为 0 到 p 的 i,执行
    • cnt := 0
    • 对于范围为 0 到 n 的 j,执行
      • 如果 arr[j] AND (2^i) 非零,则
        • cnt := cnt + 1
    • 如果 cnt > (n / 2) 的整数部分非零,则
      • X := X + (2^i)
  • sum := 0
  • 对于 0 到 n 范围内的 i,执行
    • sum := sum +(X XOR arr[i])
  • 返回 X 和 sum

示例

让我们看看以下实现以便更好地理解 −

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

相关文章


有用资源