最大有序比率[分而治之算法]

时间:2018-11-04 14:18:03

标签: algorithm divide-and-conquer

问题:“假设您输入n≥2的数字序列[a1,a2,...,an],您的目标是找到两个数字之间的最大比率,其中分子出现在序列中的分母。”

很显然,人们可以对列表进行排序并找到最大的比率,但是由于存在有关分子和分母的问题约束,因此该选项不可用。我们可以做什么?因此,由于索引很重要,因此对数组进行排序的工作量很大。

1 个答案:

答案 0 :(得分:0)

您不必对元素数组进行排序。您可以从数组末尾到数组开头检查它。请参见下面的算法:

n = size of array  A // array are 0 indexed

numerator = A[n-1]
denominator = A[n-2]

max_numerator = max(A[n-1], A[n-2])

for i = n-3 to 0 {
    // assume A[i] as denominator
    if (numerator/denominator) < (max_numerator/A[i]) {
        numerator = max_numerator
        denominator = A[i]
    }
    max_numerator = max(max_numerator, A[i])
}