有效地计算具有大于或等于k的差异的数组中的整数对[关闭]

问题描述 投票:-4回答:1

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

algorithm
1个回答
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)。

© www.soinside.com 2019 - 2024. All rights reserved.