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?
这个题的标准做法是利用异或运算的这两个法则:
1. a ^ b = b ^ a
2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
举个例子:
1^2^3^4^4^3^2的结果是啥呢?
一眼大概开不出来
根据上面两个法则,改变一下顺序吧
改成2^2^3^3^4^4^1
现在,结果一目了然了吧~
显然是1呗。
有了上面的例子,这道题就简单多了
1. a ^ b = b ^ a
2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
举个例子:
1^2^3^4^4^3^2的结果是啥呢?
一眼大概开不出来
根据上面两个法则,改变一下顺序吧
改成2^2^3^3^4^4^1
现在,结果一目了然了吧~
显然是1呗。
有了上面的例子,这道题就简单多了
public class Solution {
public int singleNumber(int[] A) {
int result = A[0];
for(int i = 1; i < A.length; i++){
result = result ^ A[i];
}
return result;
}
}