“只出现一次的数字”
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素(用位运算的方法解决此题)。
如[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。