arrays - 如何计算对 (a[i], a[j]), i < j 和 a[i] + a[j] 可以被 k 除以没有余数
问题描述
如果有可能在少于 O(N^2) 的时间内解决问题,我会徘徊。有长度为N和除数k的数组a。需要计算所有可能的对(a[i], a[j]),例如i < j并且a[i] + a[j]可以被k整除而没有余数。我能得到的只是两个嵌套循环。我可以创建 a[i] 的所有余数除以 k 的数组,但随后需要通过该数组执行类似的嵌套循环,并且它再次为 O(N^2)。
解决方案
我们可以使用哈希映射在 O(n) 中解决这个问题,其中键是余数,值是我们在迭代时看到这个余数的次数。对于每个数字,在插入第一个数字之后,在插入元素 , 之前A[i]
,将键处的值添加到结果中(k - (A[i] mod k)
如果它存在于映射中)。然后将 key 处的计数加 1 A[i] mod k
。
推荐阅读
- python - Python:读取数字列表,从字符串转换回单个数字
- python - 在 python2.7.5 上安装 pip 和旧版本问题
- java - Java中的文件覆盖安全吗?
- swift - 如何在不使用太多内存的情况下播放循环压缩的配乐?
- mysql - 在 MySQL 中优化 FROM 子句的子查询
- excel - 获取“运行错误时间'13':单元格中“DIV/0”值的类型不匹配
- python - mlxtend.feature_selection 前向选择不适用于 SVM 线性内核?
- javascript - javascript从输入中查找字符串
- c# - 缩放内部AbsoluteLayout时如何调整ScrollView的大小?
- python - 模块“sys”没有“_MEIPASS”成员