Dies ist ein Interview Frage.Finden Sie die Anzahl der Paare mit dem gleichen Unterschied in einem sortierten Array
"Gegeben ein sortiertes Array. Finden Sie die Anzahl der Paare mit dem gleichen Unterschied."
Beispiel: wenn Array ist {1, 2, 3, 5, 7, 7, 8, 9};
dann haben wir
5 Paare mit Differenz von 1
6 Paare mit Differenz von 2
4 Paare mit Differenz von 4
2 Paare mit Unterschied von 3
4 Paare mit Differenz von 6
3 Paar mit Unterschied von 5
2 paarweise mit Unterschied von 7
1 Paar mit Differenz von 8
1 Paar mit Differenz von 0
versuchte ich folgend:
maxdiff=arr[n-1]-arr[0]; //calculating the maximum difference
int b[maxdiff];
for(i=0;i<maxdiff;i++)
{
for(j=0;j<n;j++)
{
p=arr[j]+i;
x=binarysearch(p,arr); //search p in array,where x return 0/1
if(x==1)
b[i]++;
}
}
Dies ist O (k * n * logn) -Lösung, wobei k die maximale Differenz zwischen dem ersten und letzten Element eines sortierten Arrays ist, n die Array-Größe.
Hat jemand eine bessere Idee als das?
Sie sollten auch "Differenz von 0" und "Differenz von 8" einbeziehen. – Sebastian
Sie können HashMap anstelle von Array verwenden, dann kann die binäre Suche durch normale Suche in HashMap ersetzt werden, das ist O (1) – Reddy
@Sebastian: getan – x0v