您将获得一个长度为A
的数组N
,其中包含自然数。
问题是:给出索引i
和自然数k
,最大偏移量m
是多少,使得子数组A[i,i+m]
中的所有元素都大于或等于{ {1}}。
有一个简单的O(N)算法:从k
开始并向右扫描数组,直到你用i
命中偏移量。
我正在寻找的是算法和数据结构,以便:
任何人都可以构建这样的算法吗?或者有一个很好的论据,为什么这样的算法不存在?
我能想到的最好的事情是使用O(N²)和O(log N)查找构建O(N²)数据结构。
答案 0 :(得分:3)
是的,有可能。您可以使用可以在线性时间内构建的特殊数据结构,并在O(1)
中回答范围最大查询。它相当复杂,你可以阅读它here。当我们有这个数据结构时,我们可以使用二进制搜索来找到最大的可行m
。每个查询需要O(log N)
次。