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