📅  最后修改于: 2023-12-03 15:23:02.826000             🧑  作者: Mango
在一个数组中,存在一个数,其他数都出现了两次,找出这个数。要求时间复杂度为 $O(n)$,空间为 $O(1)$。
输入:
arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]
输出:
5
由于其他数都出现了两次,因此可以考虑使用异或运算来解决问题。
将数组中的所有数进行异或运算,相同的数异或后得到的结果为 0,因此最后得到的结果就是只出现一次的数。
def find_single_number(arr):
"""
在一个数组中,存在一个数,其他数都出现了两次,找出这个数。
要求时间复杂度为 O(n),空间为 O(1)。
Args:
arr: int 数组
Returns:
int: 只出现一次的数字
"""
num = 0
for i in arr:
num ^= i
return num
时间复杂度为 $O(n)$,空间复杂度为 $O(1)$。
本题利用异或运算是本题的精髓所在,掌握异或运算可以让代码更优雅,复杂度更低。