Viene fornita una matrice di n + 2 elementi. Tutti gli elementi dell'array sono nell'intervallo da 1 a n. E tutti gli elementi si verificano una volta tranne due numeri che si verificano due volte. Trova i due numeri ripetuti.Trova i due elementi ripetuti in un determinato array
Per esempio, un array = {4, 2, 4, 5, 2, 3, 1} e n = 5
ragazzi che conosco 4 soluzioni probabili a questo problema, ma di recente ho incontrato una soluzione che io sono non in grado di interpretare Sotto è un algoritmo per la soluzione
traverse the list for i= 1st to n+2 elements
{
check for sign of A[abs(A[i])] ;
if positive then
make it negative by A[abs(A[i])]=-A[abs(A[i])];
else // i.e., A[abs(A[i])] is negative
this element (ith element of list) is a repetition
}
Example: A[] = {1,1,2,3,2}
i=1 ; A[abs(A[1])] i.e,A[1] is positive ; so make it negative ;
so list now is {-1,1,2,3,2}
i=2 ; A[abs(A[2])] i.e., A[1] is negative ; so A[i] i.e., A[2] is repetition,
now list is {-1,1,2,3,2}
i=3 ; list now becomes {-1,-1,2,3,2} and A[3] is not repeated
now list becomes {-1,-1,-2,3,2}
i=4 ;
and A[4]=3 is not repeated
i=5 ; we find A[abs(A[i])] = A[2] is negative so A[i]= 2 is a repetition,
This method modifies the original array.
come questo algoritmo sta producendo risultati corretti cioè come sia working.Guys non prendere questo come un Homework domanda come la questione è stata recentemente chiesto a Intervista di Microsoft
@leppie questo è un altro problema, in quanto vi sono DUE numeri ripetuti –
@belisarius: Scusa :) Voto a favore del voto "chiudi". – leppie
@leppie Anch'io sono stato tentato: D. A proposito di questo algoritmo è intelligente ... –