【发布时间】:2020-02-15 01:37:53
【问题描述】:
给定两个数组 a 和 b,大小为 n。我必须从 a 中选择一个元素,从 b 中选择两个元素,这样。 a[i] * a[i] = b[j] * b[k].
我能够在O(n^2 log(n)) 中找到BruteForce,遍历数组和二进制搜索值。但不知道如何进一步改进。
我如何计算所有这些数字,其中元素范围为 1 <= a[i] <= 10^6 和 1 <= n <= 10^6。
【问题讨论】:
-
如果它们是整数(而不是浮点数,您需要与容错进行比较),您可以将
a的平方存储在哈希表中以在 O(1) 中查找时间而不是 O(log n) 时间。这将其归结为 O(n + m^2),其中 m 是 b 的长度,这可能与您能做的一样好,因为问题与 3SUM 非常相似。 -
This question 不是完全重复的,但那里的答案应该可以解决您的问题。
-
从 1 到 a[i] 得到 a[i] * a[i] 的所有因子。通过在地图中预先添加 B 的所有值来检查这些因素是否存在于 B 中。使用重复有点棘手,但您可以保持计数来克服这个问题。
-
如果对您有帮助,请考虑接受答案。
标签: algorithm time-complexity binary-search