我有一个类似
的数组增加,减少,增加,减少。
我想知道在增加行为结束时两个本地最大元素是什么。我知道我可以在O(n)时间找到它们,我想知道是否有可能在O(log n)时间内找到它或者比O(n)时间更好。
答案 0 :(得分:2)
如果您不知道您的数据遵循该特定模式 - 增加然后减少然后增加然后减少 - 那么您可以做的最好是O(n),因为您将不得不检查每个项目用于确定两个最高点的数组。
如果你知道肯定确实遵循这种模式,那么我最好的猜测是二进制搜索的改编,大致如下:
如果不做数学运算,我的猜测就是这个算法最好是O(2log(n)),最差的是O(n)。只要搜索整个数据集,你就会非常罕见,而且我认为你需要一个简单的小数据集,比原始搜索需要更长的时间。