巧用异或知识解决力扣中的题目

题目:找出一个列表中缺失的那个数字,比如a = [1,1,2,2,3,4,4],通过算法找出缺失的数字为3.这里有个坑,如果你使用count计数器来做的话,他会报超时出错误,因为系统会给你一个特别庞大的列表,所以你需要考虑时间复杂度。下面是我写的两种方法,大家可以参考一下:
第一种:使用异或操作,这个大家或许都不怎么用,举个例子假设有a,b两个数字,经过异或运算你会发现一个神奇的事情。那就是:
a ^ b ^ a = a,所以用这个聪明的想法就可以写出下面的代码,Python是世界上最美丽的语言!哈哈

a = [2,2,1,3,3,4,4]
# a = [i for i in range(1000000)]*2 + [100000001]
k = a[0]
for i in range(0,len(a)-1):
    if i < len(a):
        k = k ^ a[i+1]
print('---------------',k)

这里我自己有有个想法,但是没有测试,嘿嘿,大家也可以提出意见:

sum_a = sum(a)
sum_set = sum(set(a))*2

print(sum_set-sum_a)

就这短短的三行,解决问题!!点赞哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值