ACWING73. Matriz aparece apenas uma vez nos dois números (para provar oferta de segurança)

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:

  1. XOR é um número de 0 dobro
  2. Todos XOR novamente obtido soma = x ^ y
  3. Tome k, pouco k-th para garantir que uma soma
  4. Novamente vector de travessia, se um pouco k-th do número de XOR. Após a operação, a estrutura é a primeira resposta
  5. 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};
    }
};
Publicado 843 artigos originais · ganhou elogios 28 · vê 40000 +

Acho que você gosta

Origin blog.csdn.net/tomjobs/article/details/104996973
Recomendado
Clasificación