这是一个面试题。
“给定一个排序数组。找出具有相同差异的夫妇的数量。”
例如:如果数组是 {1, 2, 3, 5, 7, 7 , 8, 9};
那么我们有
5对差1
6对相差2
4对相差4对
2对相差3
4对相差6
3对相差5
2对相差7
1对相差8
1对差为0
我尝试了以下方法:
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 是数组大小。
有没有人有比这更好的主意?