微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么是list.index() 在 for 循环中复杂度

如何解决什么是list.index() 在 for 循环中复杂度

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

解决方法

您当前方法的问题在于,您使一个元素依赖于整个对立列表。相反,只需制作一张图表,显示每个元素在每个列表中的位置。

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

version: "3.9"

services:
  jdbc:
    build: .
    ports:
    - 7000:7000
    volumes:
    - ./logs/log.txt:/logs\log.txt
    environment:
    - DB_URL=https://db.address.com
    - DB_USERNAME=db_username
    - DB_PASSWORD=db_password
    container_name: jdbc

现在,通过列表 2。访问每个元素;如果存在(使用 { 5: 0,8: 1,1: 2,4: 3 } 作为故障安全功能),打印存储的索引 (list1) 和当前索引 (list2)。如果它不存在,则只需跳过打印。

O(N) 复杂度。

,

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

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

第 2 步:现在在列表 1 中存储值后,遍历列表 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() )

,

如果这是代码:

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) 中完成。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。