带有名称和数字的列表的最快搜索算法是什么

时间:2018-09-10 06:29:20

标签: java algorithm performance sorting

该列表包含名称和数字。每个名称都有一个数字。该列表按名称排序,列表中的数字排序从最小到最大。我需要找到与 每个名称 相关的所有最大数字的

a 1, a 4, a 5, b 0, b 4, c 1, n 9, n 10

我需要放掉<​​/ p>

5 + 4 + 1 + 10 = 20

我需要在 O(登录)时间内完成此操作。

2 个答案:

答案 0 :(得分:0)

提示:

扫描列表,保持“当前运行中最大的数字”和“求和的累加器”。每次元素与先前元素不同时,累积当前的最大数字并将其重置为元素的值。

我让您注意适当的初始化和完成。

这是Θ(n),您无法使其更快。 在最坏的情况下,如果所有名称都不相同,则需要输出所有数字的总和,而这要在不读取所有数字的情况下才能完成(如安迪所说)。

答案 1 :(得分:0)

伪代码,找到每个名称O(M)的最后一个O(log N)。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(file.getContents());
Thumbnails.of(in)
    .scale(1)
    .toOutputStream(baos);
byte[] bytes = baos.toByteArray();

对O(log N)使用exponential_search来查找最后一个值,因此也就是最大值。

总共O(M log N)

如果M,名称的数目是一个常数,则得到O(log N),但这将需要一些规则进行约束。