问题:“假设您输入n≥2的数字序列[a1,a2,...,an],您的目标是找到两个数字之间的最大比率,其中分子出现在序列中的分母。”
很显然,人们可以对列表进行排序并找到最大的比率,但是由于存在有关分子和分母的问题约束,因此该选项不可用。我们可以做什么?因此,由于索引很重要,因此对数组进行排序的工作量很大。
答案 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])
}