2016-01-20 14 views
6

Poiché questa è una domanda in una serie di domande. Sto modificando questo per renderlo non duplicato da altri. Grazie per tutto l'aiuto.Il modo migliore per trovare il numero singolo in coppia o in tripla

Coppie: Ho una matrice di numeri interi. Nell'array, ogni elemento appare due volte tranne uno. Voglio trovare quel numero singolo.

Esempio: [2, 4, 2, 1, 4, 1, 3], il numero singolo è 3.

Il mio pensiero è quello di utilizzare un HashMap, che richiede lo spazio O(n) e lo spazio O(n). Ci sono soluzioni migliori? Grazie.

Tripli: ogni elemento appare tre volte tranne uno. Trova quello singolo.

Esempio: [1, 2, 4, 2, 4, 1, 2, 4, 1, 3], il numero singolo è 3.

+0

L'array è in qualche modo ordinato, in modo tale che gli elementi che appaiono due volte appaiono sempre in coppie come nell'esempio. o è un array come [1,2,3,1,2] permesso, a? – AlexWien

+0

@AlexWien No, è in ordine casuale. –

+3

Possibile duplicato di [domanda intervista Accenture - trova l'unico elemento non appaiato nell'array] (http://stackoverflow.com/questions/2644179/accenture-interview-question-find-the-only-unpaired-element-in-the -array) – RiaD

risposta

6

Pensa di risolvere nel modo "bit", che prende O(n) tempo e lo spazio O(1):

public class Solution { 
    public int singleNumber(int[] A) { 
     if (A.length==0) return 0; 
     if (A.length==1) return A[0]; 

     int result = A[0]; 

     for (int i=1; i<A.length; i++) { 
      result = result^A[i]; 
     } 

     return result;   
    } 
} 

Beh, sì, ho anche la soluzione per trovare il singolo in triple.

public class Solution { 
    public int singleNumber(int[] A) { 
     int result = 0; 

     for (int i = 0; i < 32; i++) { 
      int curr = 0; 
      for (int num : A) { 
       curr += (num >> i) & 1; 
      } 
      result += (curr % 3) << i; 
     } 

     return result; 
    } 
} 

Questo può essere più difficile da comprendere. Si prega di leggere alcuni materiali sulla manipolazione dei bit e quindi capire come funziona questa soluzione.

+0

Interessante, è tratto da "Hackers Delight" – AlexWien

+0

Grazie per la pronta risposta. Cosa è "^"? –

+0

"^" è un'operazione XOR bit a bit. –

Problemi correlati