判断Int型数组中的唯一值,就用异或来把数组中的每一个值进行比较即可
利用异或算法的特性,可以快速简便的查找出数组中的唯一值。下面的方法只适用于数组除了一个一次值,剩余的值都是重复两次值的情况,类似如[4,2,2,3,3]、[5,4,4,6,6]
异或算法
^为异或,计算时先把两个数转换为二进制,再进行计算。
两个不同的值异或结果为1,两个相同的数异或后值为0
所以判断Int型数组中的唯一值,就用异或来把数组中的每一个值进行比较即可。
java实现
/**
* ^为异或,计算时先把两个数转换为二进制,再进行计算。
* 两个不同的值异或结果为1,两个相同的数异或后值为0
* 所以判断Int型数组中的唯一值,就用异或来把数组中的每一个值进行比较即可。
* @param A int整型一维数组
* @return int整型
*/
public int singleNumber (int[] A) {
// write code here
int sum=A[0];
for(int i=1;i<A.length;i++){
sum^=A[i];
}
return sum;
}
Kolin实现
/**
* ^为异或,计算时先把两个数转换为二进制,再进行计算。
* 两个不同的值异或结果为1,两个相同的数异或后值为0
* 所以判断Int型数组中的唯一值,就用异或来把数组中的每一个值进行比较即可。
* @param A int整型一维数组
* @return int整型
*/
private fun singleNumber(A: IntArray):Int{
// write code here
var sum = A[0] //4
for (i in 1 until A.size) {
sum = sum xor A[i]
}
return sum
}
判断数组:[4,2,2]
输出:4
判断数组:[5,6,5]
输出:6