Single Number
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?
http://blog.youkuaiyun.com/ccfengye/article/details/14216375
http://blog.youkuaiyun.com/exceptional_derek/article/details/17502661
解题思路:
利用异或运算的这两个法则:
1. a ^ b = b ^ a
2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
定义一个为0的变量,和数组中每一个数异或,得到只出现一次的数。
1. 异或总容易让人混淆、搞乱,谨记:相同为0,不同为1。
2. 数组一定是最多一个数出现两次,多了结果就不对了,注意读题。
Java-1:
public class Solution {
public int singleNumber(int[] A) {
int number = 0;
for (int i = 0; i < A.length; i++) {
number = number ^ A[i];
}
return number;
}
}
Java-2:
public class Solution {
public int singleNumber(int[] A) {
int x=0;
for(int a: A){
x = x ^ a;
}
return x;
}
}