【问题标题】:Why does the XOR return the missing value in these two lists?为什么异或会返回这两个列表中的缺失值?
【发布时间】:2019-04-11 03:14:13
【问题描述】:

我在 youtube 上观看了一段关于编码面试的视频,其中一个问题是找到两个列表之间的缺失值。这是他采用的方法之一,但我不明白“a”究竟是如何成为缺失值的。

def function(nums,num2):
    a = 0
    for num in nums:
        a ^= num
        print(a)
    for num in num2:
        a ^= num
        print(a,"\n")
    return a

function([1,2,3,4],[3,1,2])

【问题讨论】:

    标签: python logical-operators


    【解决方案1】:

    这样想:你正在返回 (1^2^3^4)^(3^1^2)。嗯,XOR 是可交换的和关联的,所以这等于 (1^1)^(2^2)^(3^3)^4。但是 x^x 是 0,所以它等于 4。换句话说,一对匹配值取消了,只剩下一个不匹配的值。

    【讨论】:

      【解决方案2】:

      当你将一个整数与自身进行异或运算时,你得到 0。

      因此,如果您有一个列表 [1,2,3,4] 和另一个列表 [3,1,2]。现在您将所有内容异或在一起,相同的元素会相互抵消 - 留下 1 个不同的元素。

      [1,2,3,4] xor [3,1,2] = [4]
      

      顺便说一句,这假设列表只有一个元素不同。如果没有,您将获得所有不同元素的异或。

      【讨论】:

        【解决方案3】:

        在上面的解决方案中,我们对列表中的所有元素进行异或。

        当你对两个相同的元素进行异或时,你得到 0

        >>> 1^1
        0
        

        因此,当您对列表中的所有元素进行异或时,相同的元素会被抵消,因为异或是可交换的和关联的,并且未配对的元素仍然存在。

        >>> 1^2^3^4^3^1^2
        4
        >>> 1^1^2^2^3^3^4
        4
        

        【讨论】:

          【解决方案4】:

          您必须深入了解基于电路数字设计的 XoR 如何工作的基础知识。因此,如果您根据数字设计的结构将 XoR 与相同的输入配对,则如果您提供相同的输入,XoR 将始终返回 0。因此,正如 Tom Karzes 指出的那样,其他值会被取消,剩下的就是你。还有一些其他问题也可以通过 XoR 解决,例如在填充了每个元素的副本的数组中查找唯一元素

          This wiki will give you a good description of how the XOR gate works

          【讨论】:

            猜你喜欢
            • 2017-12-31
            • 1970-01-01
            • 2014-08-17
            • 2019-05-04
            • 2014-06-13
            • 1970-01-01
            • 2017-02-11
            • 2017-11-03
            • 2016-01-08
            相关资源
            最近更新 更多