问题:给定一个整数数组,除了某个元素外其余元素均出现两次。请找出这个只出现一次的元素。
分析:
- 两个相同的元素异或变为0,一个数与0异或变为自身
- 将每一个元素都与第一个元素异或,最后由于异或原则第一个元素就是那个只出现一次的元素
public int singleNumber(int[] nums) {
if(nums.length == 1)
return nums[0];
for(int i = 1; i < nums.length; i++){
nums[0] ^=nums[i];
}
return nums[0];
/*
Arrays.sort(nums);
int i;
for(i = 0; i < nums.length-1; i = i+2){
if(nums[i] != nums[i+1])
return nums[i];
}
return nums[i];*/
}
补充:
- i ^ 0=i
- 用异或来交换两个数
void swapBitOp(int &a, int &b)
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}