开发者社区> 问答> 正文

遇到一个空间负责度问题,求解答,

一个长度为 n 的数组,其中只有2个数字出现了奇数次,其他均出现偶数次,应该怎样使用优秀的时空复杂度快速找到这个数字?

展开
收起
游客4skzfvnrxrzbi 2021-12-23 15:17:55 302 0
1 条回答
写回答
取消 提交回答
  • 主要是利用异或定理,若 a^b=x,则 a=b^x,b=x^a。 解法:1)假设这两个数分别为a、b,假设将数组中所有元素全部异或后结果为x,因为 a!=b,所以 x=a^b,且 x!=0 2)判断 x 中某位 bit 为 1 的位置,例如 x=0x00101100,那么 k=2/k=3/k=5 皆可,只需一个 ; 3)因为x中第k位为1表示a或b中有一个数的第k位也为1,另一个数第k位为 0;假设 a 的第 k 位为 1; 4)将 x 与数组中第 k 位为 1 的所有数字进行异或,最终结果得到 b; 5)将 x 与 b 异或,得到的结果即为 a

    2021-12-23 18:05:15
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
动态、高效,蚂蚁动态卡片的内核逻辑 立即下载
数据带来无限可能 立即下载
快速变化背景下,组织如何保持过程的稳定性? 立即下载