答案解释里说的模棱两可的,首先应该是 ret&(-ret),该运算的目的时为了找到两个数字的二进制位中第一个不相同二进制位,然后根据这个位置进行分组, ret&(-ret)也可以理解为 mask=1,while(ret&mask==0)mask<<=1。然后根据这个位置,在第二次进行for循环的时候,将原数组所有的元素根据i位置的不同进行分组并进行异或运算,由于其他的数字出现两次所以异或的二进制位结果会抵消掉,即n^n=0,所以最后的结果为我们要求的其中一个数num1^0=num1 [这里的0即为其他进入该分组且重复2次的数字异或的最后结果n^n^m^m....=0,并且无视元素顺序,结果都一样,可通过写demo证实],所以通过if-else进行分两组后求出我们需要的答案。
8

相关推荐

01-07 11:46
Java
如图:也是让我遇到逆天公司了,实习生是按天给工资,不忙直接强制休假了
baskly:公司为北京超图软件股份有限公司武汉分公司,明年公司应该会招新实习生,刷到的小伙伴快跑
点赞 评论 收藏
分享
2025-12-18 11:59
广州南方学院 C++
牛客78682892...:直接点还好,总比要了简历也不回的强
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务