Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
---------------------------------------------------------------------------------------------------------------------------
该题目的意思是从一个数组(这个数组的元素除了一个出现一次以外,其他都出现两次)中找出只出现一次的那个数字。
又是有关于数组的题目,之前从数组的题目中学到了使用原数组的值作为索引方便解题,这次是找出不重复的数字。
下面是代码:
public class Solution {
public int singleNumber(int[] nums) {
if(nums == null || nums.length == 0){
return -1;
}
int result = 0;
for(int i = 0;i < nums.length;i++){
result ^= nums[i];
}
return result;
}
}
可以看到,该代码使用了位运算的异或操作实现需求,其实异或可以用来判断两个数是否相等,
如果有这样一个数组{1,3,5,3,1,5},使用异或最后的结果为0。那么如果数组中有个只出现一次的数n的话
根据异或操作 0^n = n。
所以本道题可以利用异或巧妙的找出这个数字。其实本道题可以使用异或的关键,在于数组中每个元素出现两次,
如果是每个元素出3次,则使用不能使用异或。
稍微改一下题目,如果有一个数组每个元素出现两次,但是有一个数出现了3次,找到这个数。
这个同样也可以使用异或进行求解。