Além de uma matriz de números inteiros em dois números, os outros números aparecem duas vezes.
Por favor, escreva um programa para encontrar estas duas figuras aparecem apenas.
Você pode supor que deve haver dois números.
Amostra
de entrada: [1,2,3,3,4,4]
Saída: [1,2]
Idéias:
Idéia simples é passar o espaço extra.
Solução para um problema é o uso de operação OU exclusivo:
- XOR é um número de 0 dobro
- Todos XOR novamente obtido soma = x ^ y
- Tome k, pouco k-th para garantir que uma soma
- Novamente vector de travessia, se um pouco k-th do número de XOR. Após a operação, a estrutura é a primeira resposta
- A segunda resposta é a primeira resposta do XOR soma.
class Solution {
public:
vector<int> findNumsAppearOnce(vector<int>& nums) {
int sum = 0;
for(auto x: nums) {
sum ^= x;
}
int k = 0;
while(!((sum >> k) & 1)) k++;
int ans = 0;
for(auto x: nums) {
if((x >> k) & 1) ans ^= x;
}
return vector<int>{ans,sum ^ ans};
}
};