python - “输入”两个具有最低复杂度的排序列表

标签 python

我有两个排序的列表,例如

a = [1, 4, 7, 8]
b = [1, 2, 3, 4, 5, 6]
我想知道a中的每个项目是否在b中。对于上面的示例,我想找到
a_in_b = [True, True, False, False]
(或者也可以将a_in_bTrue的索引也可以)。
现在,ab都非常大,因此复杂性成为一个问题。如果是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为空)。

关于python - “输入”两个具有最低复杂度的排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65789112/

相关文章:

python - cython如何提高纯python代码的性能

Python 内置求和函数 vs. for 循环性能

python - 找不到 ''的反向按钮。 ''不是有效的 View 函数或模式名称-DJANGO

python - 我可以在 wx.lib.plot.PlotCanvas 中获得类似 imshow() 的行为吗?

python - 上游跳过时 Airflow "none_failed"跳过

python - 可视化 Python 模块的结构

python - 在搜索栏中输入查询并抓取结果

python - 根据行条件从 pandas 数据框中选择列

python - 通过 rpy2 使用 Rblpapi

python - 如何进行从 JSON 格式到表格格式的特征映射(pop)?