これはインタビューの質問です。
「ソートされた配列が与えられました。同じ差を持つカップルの数を見つけてください。」
例: 配列が {1, 2, 3, 5, 7, 7 , 8, 9} の場合。
それから私たちは持っています
差が 1 の 5 つのペア
2の差で6ペア
4 の差がある 4 つのペア
3 の差がある 2 つのペア
6 の差がある 4 つのペア
5 の差がある 3 つのペア
7 の差がある 2 つのペア
8の差で1ペア
差が0の1ペア
私は次のことを試しました:
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]++;
}
}
これは O(k*n*logn) ソリューションです。ここで、k はソートされた配列の最初と最後の要素の最大差、n は配列サイズです。
誰かがこれよりも良いアイデアを持っていますか?