相交记录列表

时间:2018-06-01 05:31:14

标签: java algorithm list data-structures

我有2个名单 -

  • List<String> RecordIdByPriority
  • List<String> RecordId

顾名思义 - 第一个列表包含优先级插入顺序的记录 我们的想法是从第二个列表中找到最高优先级记录的存在。

如果优先级列表包含<A,D,E>,第二个包含<B,E,M> - 预期输出为&#39; E&#39;。

鉴于第二个列表可能很大 - 以最有效的方式实现此目的的数据结构/例程是什么

2 个答案:

答案 0 :(得分:2)

您可以执行一些一次性预处理,将9092转换为List<String> RecordIdByPriority,将列表中的每个项目映射到列表中的位置。在您的示例中{A - &gt; 0,D - &gt; 1,E - > 2}。然后单次通过HashMap<String, Integer>列表,根据哈希映射查找最小元素。地图中未找到的元素具有隐式优先级+ infinity。

这意味着您可以在O(n)中找到元素,其中n是记录ID列表的长度。

答案 1 :(得分:0)

我认为经典循环应该仍然有效。

public String getHighestPriorityRecord(List<String> recordIdByPriority, List<String> recordId) {
    for (String record : recordIdByPriority) {
        if (recordId.contains(record)) {
            return record;
        }
    }

    // Not found
    return null;
}
  • 最佳:O(1)
  • 平均值:O(n log n)
  • 最差:O(n^2)

如果您想加快速度,那么您可以recordIdHashSet(通过创建HashSet的新实例),以便contains()成为O(1) O(n),有效地将此算法的最坏情况转变为{{1}}。