【发布时间】:2015-06-28 15:38:33
【问题描述】:
我想知道是否有办法检查数组是否包含 2 个整数(整数 > 0),第一个整数是第二个整数的 2 倍。
例如:
44 6 2 5 9 22 5 3 4 31
2 和 4 应该返回 true。
如何在 O(n) 的时间复杂度下做到这一点?
【问题讨论】:
标签: algorithm data-structures time-complexity
我想知道是否有办法检查数组是否包含 2 个整数(整数 > 0),第一个整数是第二个整数的 2 倍。
例如:
44 6 2 5 9 22 5 3 4 31
2 和 4 应该返回 true。
如何在 O(n) 的时间复杂度下做到这一点?
【问题讨论】:
标签: algorithm data-structures time-complexity
散列每个整数。对于每个整数 x,检查 2*x 是否在哈希表中。散列是 O(n),每次检查是 O(1),所以总复杂度是 O(n)。
【讨论】:
您可以使用 O(2^m) 内存在 O(n) 时间内完成此操作,其中 m 是每个输入元素的位数。
假设输入元素是m位整数(它们的范围是0..(2^m)-1):
一次性解决方案:
提高内存要求:
哈希表会给你 O(n) 摊销(不是最坏的情况),并且只有当输入集很小时才需要更少的内存(你需要自己存储值,使用大表以避免频繁的冲突,管理列表等)
【讨论】:
O(n)内存吗?数组的大小,以及因此使用的内存,将取决于最大数字的大小,不是吗?我想内存使用是m的一些功能。