python - 'in' 用于具有最低复杂度的两个排序列表
问题描述
我有两个排序列表,例如
a = [1, 4, 7, 8]
b = [1, 2, 3, 4, 5, 6]
我想知道每个项目a
是否在b
. 对于上面的例子,我想找到
a_in_b = [True, True, False, False]
(或者有索引a_in_b
也True
可以)。
现在,两者a
都b
非常大,因此复杂性是一个问题。如果M = len(a)
和N = len(b)
。我怎样才能做到这一点的复杂性低于M * O(N)
利用两个列表都已排序的事实?
解决方案
b
您可以在循环中手动迭代您的列表a
。当您从中b
看到的最新值小于a
.
from math import inf
result = []
b_iter = iter(b) # create an iterator over b
b_val = -inf
for a_val in a:
while b_val < a_val:
b_val = next(b_iter, inf) # manually iterate on it
result.append(a_val == b_val)
这应该有一个运行时间O(M+N)
,因为每个列表项最多迭代一次(b
甚至可能不需要完全迭代)。
如果您愿意,您可以避免使用浮点无穷大,但您需要做一些额外的工作来处理一些边缘情况(例如,如果b
为空)。
推荐阅读
- xamarin - Xamarin Android Java 绑定:缺少类 (XMLReader)
- java - 批量执行不带参数的存储过程 Spring SimpleJdbcCall
- c++ - VS2017 中的 _crtBreakAlloc
- google-chrome-extension - 如何将 chrome 扩展连接到网络浏览器流量
- cumulocity - Cumulocity - 自定义小部件配置 - 多设备配置
- laravel - laravel_token 对第一个请求有效,但对后续请求无效
- javascript - 填充猫鼬模型的实例
- extendscript - 在 After Effects 扩展脚本中获取所有打开的合成
- symfony - 为一对一关联设置默认值
- json - 在 nodejs 请求中解析 JSON