找到向量中的最高距离

时间:2015-03-25 21:54:56

标签: algorithm

我有一组正整数。问题是要找到最高的 向量中的距离。距离计算为A [p] + A [q] +(q-p),其中A是向量p,q是索引,p <= q。解决方案的复杂性必须是O(n)。我能用O(n ^ 2)解决方案来解决这个问题,但是我找不到这个问题的O(n)算法。

有人可以帮助我吗?提前致谢。使用哪种语言来找到解决方案并不重要

1 个答案:

答案 0 :(得分:1)

将目标重新排列为(A [p] - p)+(A [q] + q)。第一项是仅p的函数,第二项是仅q的函数。因此,它们可以在p≤q的情况下单独优化。当我们将q从0增加到n-1时,p的最佳选择可以从先前的最佳和A [q] - q计算。

def highest_distance(A):
    highest = float('-inf')
    max_Ap_minus_p = float('-inf')
    for q in range(len(A)):
        max_Ap_minus_p = max(max_Ap_minus_p, A[q] - q)
        highest = max(highest, max_Ap_minus_p + (A[q] + q))
    return highest