Qualquer número é XORed, e o resultado ainda é o número original, ou seja, a⊕0=a.
Qualquer número é XOR com ele mesmo, e o resultado é 0, ou seja, a⊕a=0.
A operação XOR satisfaz a lei comutativa e a lei associativa, ou seja, a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b.
136. Números que ocorrem apenas uma vez
Dada uma matriz não vazia de inteiros, cada elemento aparece duas vezes, exceto para um determinado elemento que aparece apenas uma vez. Encontre o elemento que aparece apenas uma vez.
Explicação:
Seu algoritmo deve ter complexidade de tempo linear. Você pode fazer isso sem usar espaço extra?
Exemplo 1:
Entrada: [2,2,1]
Saída: 1
Exemplo 2:
Entrada: [4,1,2,1,2]
Saída: 4
class Solution {
public int singleNumber(int[] nums) {
int single = 0;
for (int num : nums) {
// 把所有的数组的所有元素异或起来,两两相同的都异或为0,
// 那么结果只剩下孤单的那一个元素
single ^= num;
}
return single;
}
}
simplificar:
class Solution {
// 简化
public int singleNumber(int[] nums) {
for (int i = 1; i < nums.length; i++) {
nums[0] ^= nums[i];
}
return nums[0];
}
}