目录
题目二:一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这种数
题目三:一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这两种数
一. 概念
异或(xor)是一个算数运算符。它应用于逻辑运算
运算法则为:
如果a、b两个值不相同,则异或结果为1。
如果a、b两个值相同,异或结果为0。
二. 性质
1. 归零律:a ^ a = 0
2. 恒等律:a ^ 0 = a
3. 交换律:a ^ b = b ^ a
4. 结合律:a ^ b ^ c = (a ^ b) ^ c = a ^ (b ^ c)
5. 自反:a ^ b ^ a = b
三. 技巧性面试题
题目一:如何不用额外变量交换两个数
思路:使用异或运算的性质
public class Swap {
public static void swap(int i, int j){
i = i ^ j;
j = i ^ j;
i = i ^ j;
}
// 数组中的两个数交换
public static void swap(int[] array, int i, int j) {
array[i] = array[i] ^ array[j];
array[j] = array[i] ^ array[j];
array[i] = array[i] ^ array[j];
}
}