arrays - 面试题:数组中的反向对
问题描述
我在面试时得到了这个:一对数组 [a,b],[b,a] 被算作反向对。例如输入数组是[[a,b],[b,a],[a,c],[c,a],[a,b]],输出是2,因为有两个相反的对. 现在我可以使用哈希图将时间复杂度设为 O(n),有什么方法可以比 O(n) 更好吗?
解决方案
算法很简单:
- 你遍历一个数组,并在 hashmap 中计算对的出现,得到类似的结果
[ [a,b] : 2, [a,c] : 1, [b,a] : 1, ... ]
- 您遍历哈希图,计算逆对出现的最小值,例如
[a,b] : 2
,[b,a] : 1
,所以您有1
. - 您添加第 2 步的结果,这将为您提供最终结果。
而且你不能比 O(N) 更快,因为你必须至少检查每个元素一次。
推荐阅读
- html - CSS Grid 响应式布局,具有偶数项的自动调整和最小最大值
- ios - 处理已弃用 API 的正确方法
- r - 在映射期间将列表迭代的名称传递给 ggplot
- c - 如何使用C在每个字符之间添加空格
- c# - MySQL 格式化问题的 RDLC 报告
- c++ - Mingw 交叉编译仅在调试模式下运行 linux -> windows
- xslt-1.0 - 如何使用 value-of 和 select 转换参数
- lazy-loading - Nativescript angular - 包含数据表单的模块在 ios 中退出而没有错误!延迟加载模块
- regex - 正则表达式不匹配它应该的第一个替代方案
- python - ModuleNotFoundError:python 3.6.7 上没有名为“google”的模块