【发布时间】:2019-02-14 13:24:18
【问题描述】:
列表中有名称和编号。每个名字都有一个数字。该列表按名称排序,列表中的数字从最小到最大排序。我需要找到与每个名字相关的所有最大数字的总和。
a 1, a 4, a 5, b 0, b 4, c 1, n 9, n 10
我需要输出
5 + 4 + 1 + 10 = 20
我需要在 O(logn) 时间内完成此操作。
【问题讨论】:
-
看起来应该自己做的作业
-
您不能在
O(log n)时间内对n元素进行排序,因为检查所有元素的复杂性已经达到O(n)。如果您追求O(n * log n)复杂度,那么有很多拟合算法。只需查找它们并使用您喜欢的一个。 -
起初 - n 是什么?
-
你不能在对数时间内做到这一点。在最坏的情况下,每个名称只有一个数字,因此您必须将它们全部相加:您不能在次线性时间内添加 n 个任意数字。
-
O(logn) 只有在您对列表中不同名称的数量有额外限制时才可能。如果不同名称的数量(接近)logn,您可以构造一个平均情况下为 O(logn) 的算法(使用列表如何排序的知识)
标签: java algorithm performance sorting