c++ - 我必须找到给定数组中所有数字的周期,就像有很多解决方案但数组的大小是 10^5
问题描述
例如。给定的数组:[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
然后对hashmap 中的每个条目输出0
if len(l) <= 1
,否则输出l[1] - l[0]
。如果您还必须检查期间是否一致,请检查l[i] - l[i-1] == l[1] - l[0]
所有i >= 2
.
推荐阅读
- ios - how to upload image with form data which image is on parameter to api?
- c# - 在 Devexpress DataGrid 中显示图像不起作用
- laravel-5 - 尝试通过单击 Laravel VS Code 转到代码内的文件
- c++ - 我们可以对内存分配进行单元测试吗?
- c# - Entity Framework Core 上的多线程问题
- ruby-on-rails - ActionCable - WebSocket 握手期间出错:意外响应代码:404
- angular - 如何修复 Http-Server npm 命令问题?
- scala - Constructor.newInstance 替换 Scala 对象
- machine-learning - 将多个模型的输出与 CTC 输出层相结合(集成)
- visual-c++ - 为什么 [ebp-8] 是 Visual C++ 中第一个局部变量的位置?