arrays - 在 O(n*log(n)) 中找到一对具有给定和和乘积的数组元素

标签 arrays algorithm integer

令 A 为 n 个正整数数组,k 为给定整数。

我正在寻找算法来查找数组中是否有一对元素使得 A[i] * A[j] == kA[i] == A[j] + k。如果存在这样的一对,算法应该返回它们的索引。

这是一个家庭作业,我们被告知有一个 O(n*log(n)) 的解决方案。

最佳答案

首先想到的是:

Make a Map<Integer, Integer>

for each number a in A:
   if (k / a) is a key in the HashMap:
      output the index of a, and HashMap.get(k/a)
   else
      HashMap.add(a, indexof(a))

所以遍历数组是 O(n),在 Map 中查找键是 O(log n)(假设你使用了 TreeMap,HashMap 在最好的情况下可能更好,但在最坏的情况下更差)

编辑:我想这只能回答 a) 但你明白了

关于arrays - 在 O(n*log(n)) 中找到一对具有给定和和乘积的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3010964/

相关文章:

SQLite3 整数最大值

algorithm - 计算从正方形中心到边缘的路径

c++ - 分析和排序足球联赛球队 C++

algorithm - 计算网格中标记节点 k 距离内的节点

c - 使用 INTXX_C 宏和执行类型转换到文字之间有什么区别?

c++ - 如何区分数字输入和字母输入

python - Numpy Interweave 奇怪形状的数组

c# - 将字节数组转换为数字字符串 [c#]

C++,没有 <vector> 的对象数组

Java - 使用键/值对制作对象?