1 条题解
-
0
核心思想
利用异或运算的性质 异或运算有以下重要性质:
异或满足交换律和结合律
情况1: 当只有一个数出现奇数次时,只需要将所有数进行异或操作:
result = 0 for each number x: result = result ^ x最终得到的 result 就是那个出现奇数次的数。
情况2: 设两个出现奇数次的数为 和 :
第一步:将所有数异或,得到
第二步:找到 中任意一个为1的二进制位(通常取最低位的1)
这个位表明 和 在这一位上不同
第三步:根据这个位将原数组分成两组:
该位为1的数
该位为0的数
第四步:分别对两组数进行异或,得到 和
第五步:按从小到大顺序输出
复杂度分析
时间复杂度:,只需要遍历数组2-3次
空间复杂度:,只用了几个变量,完美满足内存限制
关键点
异或运算的巧妙应用:利用异或消除偶数次出现的数字
分组思想:通过二进制位的不同将两个目标数分开
内存优化:不需要存储整个数组,可以边读入边处理
总结
这道题考察了位运算的灵活运用,特别是在内存严格限制下的算法设计能力。掌握异或运算的性质是解决此类问题的关键。
- 1
信息
- ID
- 5522
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者