有效地计算具有大于或等于k的差的阵列中的整数对

时间:2017-12-18 11:23:35

标签: algorithm

给定一个整数数组,如何有效地计算差值至少为k的整数对?我的目标是在O(n ^ 2)时间内完成此任务。

1 个答案:

答案 0 :(得分:1)

如果您需要列出它们,您可能需要列出每对都是O(n ^ 2)。如果您只需要对它们进行计数,则可以通过对列表进行排序来获得O(n log n),然后对于每个start_index,找到值的差值至少为k的最小end_index。会有n - end_index这些。

每个连续步骤是将start_index递增1,然后递增end_index直到值的差值至少为k,再次添加n - end_index,并重复。

这是用于排序数组的O(n)代码(在Ruby中)。

def count_pairs (arr, k)
    count=0
    end_index = 0
    0.upto(arr.length - 1) do |start_index|
        while arr[end_index] - arr[start_index] < k do
            end_index += 1
            return count if end_index >= arr.length
        end
        count += arr.length - end_index
    end
    return count
end

如果列表已经排序,则为O(n)。