在Python中找到与整数数组的每个数字进行XOR运算时得出最小和的数字

假设我们有一个数组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
      猜你喜欢