如何解决什么是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 举报,一经查实,本站将立刻删除。