【问题标题】:Finding the missing number in array in Python using XOR使用 XOR 在 Python 中查找数组中缺失的数字
【发布时间】:2019-11-23 10:01:41
【问题描述】:

以下代码运行良好,并使用 XOR 查找丢失的连续数组数。 请问为什么第一个循环从1开始,到n结束,第二个循环从2开始,到n+2结束?

a = [1, 2, 3,4, 5, 6,8] 
n = len(a)
x1 = a[0]
x2 = 1
for i in range(1, n):
 ##   print (i)
#print (' ')
for i in range(1, n): 
        x1 = x1 ^ a[i]
        print (a[i],x1)
print (' ')
for i in range(2, n + 2): 
        x2 = x2 ^ i 
    ##    print (i,x2)
##print (' ')
print (x1 ^ x2 )

【问题讨论】:

  • 因为你这样做
  • 因为for i in range(1, n)for i in range(2, n + 2)...
  • 真正的问题是什么?
  • 为什么不能与 0..n 和 0..n+1 一起使用?

标签: python arrays series xor


【解决方案1】:

范围不是从0 开始的事实是因为您将x1x2 初始化为数组的第一个值。

您可以从0 开始,使用x1, x2 = 0,就像这样:

a = [1, 2, 3, 4, 5, 6, 8]
n = len(a)
x1 = 0
x2 = 0
for i in range(0, n):
    x1 = x1 ^ a[i]
for i in range(0, n + 2):
    x2 = x2 ^ i
print(x1 ^ x2) # still prints 7

事实上你一直到n+2(实际上只是到n+1,因为末尾不包含)是因为数组缺少元素,所以在你的情况下n+1是@987654330 @,如果不对 x2 进行异或运算,您最终会得到错误的值(在本例中为 15,即 7^8)。

澄清一下:您必须将实际值与预期值进行异或运算才能找到缺失的值。

第一个范围适用于所有实际值,而第二个范围适用于所有可能值,最高可达n+1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2011-11-11
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多