1 条题解

  • 0
    @ 2025-11-19 23:12:19

    核心思想

    利用异或运算的性质 异或运算有以下重要性质:

    aa=0a \oplus a = 0

    a0=aa \oplus 0 = a

    异或满足交换律和结合律

    情况1:k=1k = 1 当只有一个数出现奇数次时,只需要将所有数进行异或操作:

    result = 0
    for each number x:
        result = result ^ x
    
    

    最终得到的 result 就是那个出现奇数次的数。

    情况2:k=2k = 2 设两个出现奇数次的数为 aabb

    第一步:将所有数异或,得到 x=abx = a \oplus b

    第二步:找到 xx 中任意一个为1的二进制位(通常取最低位的1)

    这个位表明 aabb 在这一位上不同

    第三步:根据这个位将原数组分成两组:

    该位为1的数

    该位为0的数

    第四步:分别对两组数进行异或,得到 aabb

    第五步:按从小到大顺序输出

    复杂度分析

    时间复杂度:O(n)O(n),只需要遍历数组2-3次

    空间复杂度:O(1)O(1),只用了几个变量,完美满足内存限制

    关键点

    异或运算的巧妙应用:利用异或消除偶数次出现的数字

    分组思想:通过二进制位的不同将两个目标数分开

    内存优化:不需要存储整个数组,可以边读入边处理

    总结

    这道题考察了位运算的灵活运用,特别是在内存严格限制下的算法设计能力。掌握异或运算的性质是解决此类问题的关键。

    • 1

    信息

    ID
    5522
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者