如何在不迭代所有元素的情况下在预排序数组中找到一个元素?

How can I find an element in a pre-sorted array without iterating all of it?

我试图找到一条直线与一组抛物线的交点的最大值(我正在实现一条财富线,这是一个网站事件)。

我注意到当我接近最大值(我正在寻找的那个)时,这些值往往会变大,然后再次变小,就好像它们已经排序一样。一个例子是这样的:
[f(a) = -3, f(b) = -1, f(c) = 4, f(d) = 18, f(e) = 67, f(f) = 34, f(g) = 8, f(h) = -7]
(67 是我需要得到的值)。

由于计算交点不如读取数组的值那么快,我想知道是否有更快的方法来获得最大值而无需迭代所有抛物线。

由于 voronoï 图很大,抛物线数组预计平均有 10k 到 20k 个元素。最大值可以在数组中的任何位置。

先增后减或先减后增的数列称为双调数列。您可以在 O(log n) 中找到 maximum/minimum 点,这里是 a link 的示例实现。事实上一旦你找到这个点,你可以使用二进制搜索在 O(log n) 中找到任何元素。