Questa è un'interrogazione.Trova il numero di coppie con la stessa differenza in un array ordinato
"Dato un array ordinato, trova il numero di coppie con la stessa differenza."
ad esempio: se l'array è {1, 2, 3, 5, 7, 7, 8, 9};
allora abbiamo
5 accoppiamenti con differenza di 1
6 accoppiamenti con differenza di 2
4 coppie con differenza di 4
2 coppie con differenza di 3
4 coppie con differenza di 6
3 coppie con differenza di 5
2 coppie con differenza di 7
1 accoppiamento con differenza di 8
1 accoppiamento con differenza di 0
ho provato il seguente:
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]++;
}
}
questa è la soluzione O (k * n * logn) dove k è la differenza massima tra il primo e l'ultimo elemento di un array ordinato, n è la dimensione dell'array.
Qualcuno ha un'idea migliore di questa?
È necessario includere anche "differenza di 0" e "differenza di 8". – Sebastian
Puoi usare HashMap piuttosto che array, quindi la ricerca binaria può essere sostituita dalla normale ricerca in HashMap che è O (1) – Reddy
@Sebastian: fatto – x0v