笔试面试宝典中的一个题目
问题描述:一个数组里除了一个数字之外,其他数字都出现了两。找出这个只出现一次的数字。时间复杂度为O(n),空间复杂度为O(1)。
用异或运算的性质:任何数字异或自己都等于0,数字与0异或结果为数字本身。异或的交换律。
public class Test {
public static int findNotDouble(int []arr){
int tmp = arr[0];
for(int i = 1; i<arr.length; i++){
tmp ^= arr[i];
}
return tmp;
}
public static void main(String[] args) {
int []arr = {1,2,3,5,5,3,2,1,6};
int result = findNotDouble(arr);
System.out.println(result);
}
}
如果题目改为数组A中,一个整型数组除了一个数字以外,其他数字都出现了3次,那么如何找到这个数?