【发布时间】:2012-05-22 23:14:25
【问题描述】:
我知道这个问题已经被问过很多次了。但几乎所有的解决方案都有 O(n^2) 的计算复杂度。
我正在寻找复杂度为 O(n log n) 的解决方案。有人可以推荐吗?
非常感谢, 柴坦亚
【问题讨论】:
-
可能重复 stackoverflow.com/questions/109383/… 答案是
O(n)复杂度 -
为什么不使用 TreeMap?编辑 - 这也是 noMAD 链接的问题中的建议。
-
@noMAD 链接的问题的答案有几个严重的缺陷(如该答案的 cmets 中所建议的那样)。特别是,如果多个键映射到同一个值,事情就会中断。如果您对不在源映射中的键调用
map.get(key),您将获得几乎不可预测的异常,并带有令人困惑的堆栈跟踪。那个解决方案O(n)怎么样? -
此外,如果支持映射更改值,
TreeMap可能会损坏,因此当您调用get时,entrySet中出现的条目将不会出现。啊。我见过太多人尝试TreeMap方法,但后来却受到伤害。请避免它。 -
“几乎所有解决方案的计算复杂度都为 O(n^2)”是什么意思?所有最常见的排序算法都有复杂度 O(N log(N))。除非您听说过的唯一解决方案是冒泡排序,否则您应该在完成 CS101 作业后立即忘记它。
标签: java collections hashmap