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?
分析题目
给一组整形数字,其中除了一个数字只出现过一次之外,其他数字均出现两次,让找出只出现过一次的这个数。
要求:O(n)时间复杂度
解题思路
由于题目要求O(n)时间复杂度,所以不能通过遍历统计每一个元素的个数来找出那个单独的数字。由于相同的两个整数进行异或结果为0,而零和任意数异或结果任是那个数,结合题目,其他数字均出现两次,又由于异或运算符合交换律,所以我们为了想起来容易,假设那个单独的数在数组最后一个,而其他重复的都排好了顺序,比如:112233445,将这一组数进行异或,相当于零和5进行了异或,结果就是5,也就是我们要找的那个单独的数字。
代码实现
int singleNumber(int[] nums) {
int result = 0;
for (int i = 0; i<nums.length; i++){
result ^=nums[i];
}
return result;
}