gpt4 book ai didi

arrays - 查找未排序数组中的所有对

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:37 24 4
gpt4 key购买 nike

我在 find 中遇到了一个编程问题,我必须在给定的未排序数组中找到所有对,这样

|i - j| <= K and |A[i] - A[j]| <= x 

For example:

 A = {5,4,8,3} and x = 3 and k = 2.

答案:(5,4), (5,8), (4,3)

我已经尝试过很多次了,但是想不出任何时间复杂度小于O(nk) 的算法。我也尝试过平衡二叉树,但它对我没有帮助。

编辑:如果我们必须找到这样的对是否存在于数组中(这意味着只有一个这样的对),我们能做点好事吗?

最佳答案

取前 N-1 个条目,并对它们进行排序。这给了你最小/最大和前几对。然后对于列表中的每个后续条目,它是根据最小值/最大值匹配部分、全部还是不匹配?如果它不匹配或全部匹配,则您将直接配对。如果它匹配一些,则进行二进制搜索以找到截止点。然后删除第一个条目并添加新条目,使用平衡二叉树来保存排序列表。

所以你是 O(N log k)。在实践中,开销会如此之高,以至于不太可能击败朴素的 O(Nk) 方法。

关于arrays - 查找未排序数组中的所有对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39785828/

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