java - 具有名称和数字的列表的最快搜索算法是什么
问题描述
该列表有名称和编号。每个名字都有一个数字。该列表按名称排序,列表中的数字从最小到最大排序。我需要找到与每个 name关联的所有最大数字的总和。
a 1, a 4, a 5, b 0, b 4, c 1, n 9, n 10
我需要输出
5 + 4 + 1 + 10 = 20
我需要在O(logn)时间内完成此操作。
解决方案
伪代码,找到每个名字 O(M) 的最后一个 O(log N)。
auto it = vec.begin();
while (it != vec.end()) { // O(M)
auto last = find_last_with_same_name(it, it->name);
sum += last.value;
it++;
}
使用指数搜索 O(log N) 来查找最后一个因此是最大值。
总共 O(M log N)。
如果 M,名字的数量是一个常数,你得到 O(log N),但这需要一些规则律师。
推荐阅读
- python - Django 访问 ForeignKey 字段并获取它们的值
- android - 如果未使用转换,则不会调用 MediatorLiveData 的 OnChanged
- c# - 如何递归解析json并找到特定对象?
- azure-web-app-service - 以编程方式监控出站 Azure 应用服务连接
- pandas - 熊猫在组内搜索上下邻居
- python - 无法在终端中使用 sort 命令对 txt fly 中的数据进行排序
- c++ - 带图像存储的 bindTextureUnit
- javascript - 进度条不会在页面上更新
- javascript - 添加 tsParticles 作为背景
- javascript - 如何确保页面缩放级别为 100%