异或的运算方法是一个二进制运算: 1^1=0 0^0=0 1^0=1 0^1=1 两者相等为0,不等为1.
由此得出
0^N=N
N^N=0
2)异或运算满足交换律和结合率
a^b=b ^a
(a^b) ^c= a ^( b ^ c)
int a=甲; int b=乙; a=a ^b; a=甲 ^ 乙; b=乙; b=a ^b; a=甲 ^ 乙; b=甲 ^ 乙 ^ 乙=甲 ; a=a ^b; b=甲 a=甲 ^ 乙 ^ 甲=乙;
必须满足内存区域不能相等才能用异或运算
异或的题型在一个数组中,整型数组,已知只有一种数出现了奇数次,其他数出现了偶数次
满足 时间复杂度o(N),空间复杂度未o(1)
找出奇数次的数
public static void printoddTimesNum1(int[]arr){
int eor =0;
for (int cur :arr){
eor ^=cur;
}
System.out.println(eor);
}
为什么这么写嗯
例如一个数组:
四个1 ;四个2 三个3
[1,3,2,1,2,3,1,2,3,1,2]
1^1 ^1 ^1 ^ 2 ^2 ^2 ^2 ^3 ^ 3 ^3=3;
因为
1^1 ^1 ^1=0;
2^2 ^2 ^2=0;
3^ 3 ^3=3;
在一个数组中,整型数组,已知只有俩种数出现了奇数次,其他数出现了偶数次
满足 时间复杂度o(N),空间复杂度未o(1)
找出奇数次的数
public static void printoddTimesNum1(int[]arr){
int eor =0;
for (int cur :arr){
eor ^=cur;
}
System.out.println(eor);
}
全部异或之后就剩俩个奇数的异或了,
也就是 a^b



