1、题目
给定一个整数数组,每个元素都出现了两次,但有一个只出现了一次,请找出这个数。
Note:算法要求有线性时间复杂度,并且不占用额外的空间。
2、解法:
public class Solution {public int singleNumber(int[] A) {int re=0;int i;for(i= 0;i<A.length;i++){re = re^A[i];}return re;}
}
3、思路:
异或的特点:
1).异或满足交换律。如1^2^1=1,2^1^1=2,一个数被另外两个数异或两次,该数本身不变。
2).相同两个数异或为0。
3).0异或一个数为那个数本身。
4、扩展:
异或也可以实现两个数据的交换,不用临时变量的方法。
x = x^y;
y = x^y;
x = x^y;