gpt4 book ai didi

python - 如何在整数数组中找到所有有序的元素对,其总和位于给定的值范围内

转载 作者:太空狗 更新时间:2023-10-29 17:52:08 24 4
gpt4 key购买 nike

给定一个整数数组,找出数组中所有有序元素对的个数,其总和在给定范围 [a,b] 内

这是相同的 O(n^2) 解决方案

'''
counts all pairs in array such that the
sum of pair lies in the range a and b
'''
def countpairs(array, a, b):
num_of_pairs = 0
for i in range(len(array)):
for j in range(i+1,len(array)):
total = array[i] + array[j]
if total >= a and total <= b:
num_of_pairs += 1
return num_of_pairs

我知道我的解决方案不是最优的执行此操作的更好算法是什么。

最佳答案

  1. 对数组进行排序(比如按升序排列)。
  2. 对于数组中的每个元素 x:
    • 考虑元素之后的数组切片。
    • 对这个数组切片进行二分查找 [a - x],称之为 y0。如果未找到完全匹配项,则将比 [a - x] 更大的最接近匹配项视为 y0。
    • 输出从y0开始的所有元素(x,y)只要x + y <= b

时间复杂度当然对输出敏感,但这仍然优于现有算法:

O(nlogn) + O(k)

其中 k 是满足条件的对数。

注意:如果您只需要计算对的数量,您可以在O(nlogn) 中完成。修改上述算法,使 [b - x](或下一个更小的元素)也被搜索。这样,您可以简单地根据第一个和最后一个匹配项的索引计算每个元素在 O(logn) 中的“匹配项”数。然后,这只是将它们相加以获得最终计数的问题。这样,初始的 O(nlogn) 排序步骤占主导地位。

关于python - 如何在整数数组中找到所有有序的元素对,其总和位于给定的值范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27705359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com