一个数组中有两种数出现了奇数次
程序员文章站
2022-07-15 12:06:28
...
//一个数组中有两种数出现了奇数次
//其他数出现了偶数次
#include<bits/stdc++.h>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+5;
int main(){
int x[] = {1,1,3,5,3,5,2,4,2,2};
int n = sizeof(x) / sizeof(*x);
int ab=0;
//1.第一次异或,求得 a^b
for(int i = 0;i < n;i++)
ab ^= x[i];
//cout << ab << endl;
//2.第二次异或
//1)首先找到a^b的最右边的1,保留1开始的二进制位
//10110010 保留 t = 10 (/101 010 011/ 11000 00111 + 1 = 01000)
int t = ab & (~ab + 1);
//cout << t <<endl;
//2)异或时,只要这个数与t按位与为t,异或起来就得到了
//a和b的其中1个数a
int a=0;
for(int i = 0;i < n;i++){
if((x[i] & t) == t){ //错在优先级
a^=x[i];
}
}
//3.第三次异或,y =a^b^a;
int b = ab ^ a;
cout<<a<<" "<<b<<endl;
return 0;
}
上一篇: 异或---太强了
下一篇: 算法题/数组中出现1次的两个数
推荐阅读
-
一个数组中有两种数出现了奇数次
-
C语言编程实现之一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字
-
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次, 找出这两个只出现一次的数字。
-
一个数组中只有两个数字是出现一次的,其他的数字都出现了两次,找出这两个数字,编写程序。
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。...
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。