算法|算法日记1: letcode136题只出现一次的数字

【算法|算法日记1: letcode136题只出现一次的数字】算法|算法日记1: letcode136题只出现一次的数字

题目要求
解题
这题简单来说就是一个求唯一没有重复的题 , 通常可以将所有的值遍历一遍即可找出唯一不重复的那个值 。
但是题目要求的是不使用额外空间 , 那么此时就一定要使用到位异或 。
很多小伙伴都知道计算机编程中的逻辑运算 , 也就是与或非这三种 , 而位异或是什么呢 , 其实本质上来说也是或运算 , 只不过他是二进制上的或 。


两个数转为二进制进行比较 , 一位一位的比 。如果两个数相应的位上一样 , 结果就是0 , 不一样就是1 , 如5+3所以 011^101=110
而这题的思路就出来了 , 可以这么理解相同的两个数的二进制在位异或的计算下直接相冲抵消了 , 只剩下了0 , 而0和任何数位异或都等于那个值本身 。
class Solution:
def singleNumber(self nums: List[int
) -> int:
s = 0
for i in nums:
s=s ^ i
return s
首先设置一个初始的值遍历列表和其位异或 , 最后就只剩下那个唯一的值了 。