利用位运算求“只出现一次的数字”

“只出现一次的数字”


给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素(用位运算的方法解决此题)。
如[1,2,3,2,1],则输出3

代码如下:

def solution():
    lst = list(int(n) for n in input('enter data:').split())
    temp = 0  # 初始temp设为0,用来与列表元素进行异或运算
    for i in range(len(lst)):
        temp = temp ^ lst[i]
    print(temp)

# 运行结果
# enter data:1 2 4 3 2 1 3
# 4

两个相同的数异或为0,0与非零整数异或得到其本身,采用异或运算,可以快速的解决这一问题。

从输入的数据按次序进行异或运算,0与1转换成二进制为0000,0001,0^1=1,1再与2进行异或运算,依此类推,最后的到的结果即为只出现一次的数。

负数的异或运算要将原码转换成补码,按位异或运算后再将结果(补码)转换成原码。如-3^3,先将其转换成二进制,1011,0011。首位是符号位,由于正数的补码与原码相同,则不需要转换,1011的补码为1101(每一位取反再加一),异或运算后结果为1110,将其转换为原码最终结果为1010,即为-2。

猜你喜欢

转载自blog.csdn.net/qq_43965708/article/details/108796274