给定一个大小为n的数组a,如何计算对的数目(A[i]
,A[j]
),使它们之间的绝对差小于或等于k,其中k是任何正自然数?(i
、j<=N
和i!=j
)
我的方法:
对数组排序。
创建另一个数组,存储两个连续数字之间的绝对差。
我的方向对吗如果是,那么我该如何继续?
最佳答案
这里有一个o(nlogn)算法:
1. sort input
2. traverse the sorted array in ascending order.
3. for A[i] find largest index A[j]<=A[i]+k using binary search.
4. count = count+j-i
5. do 3 to 4 all i's
时间复杂度:
Sorting : O(n)
Binary Search : O(logn)
Overall : O(nlogn)
关于algorithm - 数数对的绝对差小于K,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24709950/