【问题标题】:What is (list.index() inside a for loop) complexity什么是(for 循环内的 list.index())复杂度
【发布时间】:2021-07-27 00:51:14
【问题描述】:

对于(第一个列表)中的每个数字: 第二个 list.index(number) -> 变量 打印(第一个列表中的数字索引)和(变量)

【问题讨论】:

标签: python list algorithm data-structures time-complexity


【解决方案1】:

您在当前方法中遇到的问题是您将放置 one 元素依赖于 整个 反对列表。相反,只需制作一个图表,说明每个元素在每个列表中的位置。

使用字典。遍历list1,填写key:value作为元素及其索引。这给了你

{ 5: 0, 8: 1, 1: 2, 4: 3 }

现在,浏览列表 2。访问每个元素;如果存在(使用get 用于故障安全功能),打印存储的索引(list1)和当前索引(list2)。如果不存在,则直接跳过打印。

O(N) 复杂度。

【讨论】:

    【解决方案2】:

    您可以使用地图数据结构将时间复杂度降低到 O(n)

    第 1 步:遍历列表一并存储列表一中所有值的索引。
    例如; List1 = {5, 8, 1, 4}
    你的地图看起来像
    5 -> 0
    8 -> 1
    1 -> 2
    4 -> 3

    第 2 步:现在在列表一中存储值之后,遍历列表 2 并检查地图中是否存在元素,如果存在则打印它们的索引,否则跳过该元素
    例如 List2 = {1, 5, 4, 8}
    输出:
    val = 1, 2 -> 0
    val = 5, 0 -> 1
    val = 4, 3 -> 2
    val = 8, 1 -> 3

    注意:只有当两个列表中的元素不同时,该实现才有效。否则会有多个索引对应一个特定的值。

    如果你使用 C++,那么我建议你使用 unordered_map,因为它在 O(1) 中工作。

    这个实现的时间复杂度将是
    O(list1.size() + list2.size())
    空间复杂度为 O( list1.size() )

    【讨论】:

      【解决方案3】:

      如果这是代码:

      for searched in first: # O(n)
        i = second.index(searched) # O(m)
        print(i)
      

      那么答案是O(n * m),其中n = len(first)m = len(second)
      如果您使用字典,可以在O(n + m) 中完成。

      【讨论】:

        猜你喜欢
        • 2015-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多