算法每日一题(python,2024.05.23) day.5

题目来源(力扣. - 力扣(LeetCode),简单)

解题思路:

法一:消消乐法

准备一个pre集合,遍历nums列表,若num未在pre内,则添加进pre集合内,若存在,则将pre内与该数相同的数据删除,则最后留下的数据即为只出现一次的数据。

法二:位运算中的异或运算

已知异或运算时相同的数据进行异或运算将会得到0,而其他数据与0进行异或运算得到的为本身,因此我们可以对列表中的所有数据进行异或运算,最后得到的数据即为只出现一次的数据

优化:利用reduce函数重复执行xor(异或运算)  Python reduce() 函数 | 菜鸟教程

代码实现:

法一: 

pre = set()
for num in nums:
    if num in pre:
        pre.remove(num)
    else:
        pre.add(num)
return pre.pop()

法二: 

x = 0
for num in nums:
    x ^= num  
return x

优化:

return reduce(xor,nums)

总结: 

找准切入点--得到唯一元素->1.消除其他元素  2.直接遍历找到唯一元素(耗时过长,pass)

消除其他元素->做比较,有相同的消去->得到法一

->直接消除法(看其他人题解法)->得到法二

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Neophyte0608

你的鼓励将使我创作学的更加快乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值