我必须找到给定数组中所有数字的周期,就像有很多解决方案,但数组的大小是 10^5

I have to find the period of all numbers in an given array, like there are many solutions but size of the array is 10^5

本文关键字:数组 解决方案 周期 数字      更新时间:2023-10-16

例如。给定的数组:[1,2,1,3,1,2,1,5] 应该返回-1 -> 2 2 -> 4 3 -> 0 5 -> 0

我能想到一个解决方案,但它是 O(n^2(。 建议更好的东西。

在一次线性扫描中将数组转换为按值索引的数组哈希图,其中包含找到该值的索引。对于您的示例,这将是:

{
1: [0, 2, 4, 6],
2: [1, 5],
3: [3],
5: [7],
}

然后对于每个条目l在哈希图中输出0如果len(l) <= 1,否则输出l[1] - l[0]。如果还必须检查周期是否一致,请检查所有i >= 2l[i] - l[i-1] == l[1] - l[0]

相关文章: