例如, 考虑数组
A = [1,2,3,1,1,2,1,4,5,6,1,2,3]
数组中1
之后的元素2
的第一次出现(出现的索引)为3
数组中索引2
之后元素2
的第一次出现是5
数组中索引1
之后元素4
的第一次出现是6
如果在特定索引之后没有出现,我们可以输出-1
我该如何有效地做到这一点?
答案 0 :(得分:6)
如果是一次性查询,那么在该位置之后线性搜索数组会做得更好:O(n)。
如果需要多次在同一个数组上执行类似的查询,请从每个不同的元素构建一个哈希多图,以及它所在的索引的排序列表。那么它只是一个问题:a)查找元素的排序列表b)二进制搜索排序列表(匹配不需要精确),然后返回后继元素/第一个元素大于指定的位置。我确定您可以在应该返回-1
时处理案件。这是O(1)+ O(logn)= O(logn)。
答案 1 :(得分:1)
如果数字是整数,我知道O(mlogn)。这里m是查询次数。
首先我们需要存储一个矢量< INT> [100]。它存储数字的准确性。 对于每个查询。二进制搜索向量(此处向量按递增顺序),它接收O(logn)。因此它是O(mlogn)。
如果数组中的数字是浮点数,我们应该改变vector< int> [100]来映射< float,vector>,然后需要O(m * logn * logn)。