给定一个大小为n的数组a,如何计算对的数目(A[i]A[j]),使它们之间的绝对差小于或等于k,其中k是任何正自然数?(ij<=Ni!=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/

10-13 05:03