📌  相关文章
📜  国际空间研究组织 | ISRO CS 2009 |问题 61(1)

📅  最后修改于: 2023-12-03 15:23:02.826000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2009 |问题 61

题目描述

在一个数组中,存在一个数,其他数都出现了两次,找出这个数。要求时间复杂度为 $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)$。

总结

本题利用异或运算是本题的精髓所在,掌握异或运算可以让代码更优雅,复杂度更低。