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?
题意:一个整数数组,一个数字出现一次,其余的都是出现两次,找出出现一次的数字。
注意:为线性复杂度,最好能不用额外空间解题。
我的思路:定义一个额外数组T_T将原数组数字作为下表,新数组记录他们出现的次数,最后再遍历数组,查看出现次数为1的数,
但是,此方法没有考虑到负数!!!
大佬方法:利用异或(^)运算符。
技巧:初值为0,每个数出现两次,异或两次刚好为0,出现一次的与0数异或后为这个数本身!!!
代码:
class Solution {
public int singleNumber(int[] nums) {
int result=0;
for(int i:nums){
result ^=i;
}
return result;
}
}