【问题标题】:Hackerrank problem: No idea -> Set vs List RUNTIME in Python 3Hackerrank 问题:不知道 -> 在 Python 3 中设置与列出 RUNTIME
【发布时间】:2021-02-09 16:56:14
【问题描述】:

https://www.hackerrank.com/challenges/no-idea/problem

在上面的问题中,我有一个这样的解决方案:

if __name__ == '__main__':
    n, m = map(int, input().split())
    array = list(map(int, input().split()))
    A = list(map(int, input().split()))
    B = list(map(int, input().split()))
    print(sum([(i in A) - (i in B) for i in array]))

结果在某些测试用例中超时。 但是,如果我将 A 和 B 的类型切换为 set,例如:

A = set(map(int, input().split()))
B = set(map(int, input().split()))

它完美地通过了所有的测试用例。 我不明白为什么 Python 3 在这种情况下使用 set 比使用 list 运行得更快?

【问题讨论】:

    标签: python python-3.x list set


    【解决方案1】:

    set 是一个哈希表和O(1) 查找,所以(i in A) 操作非常便宜。当您使用set 时,sum 是一个O(N) 操作。

    list 是一个序列,所以有O(N) 查找,所以操作(i in A) 突然变得非常昂贵。当您使用set 时,sumO(M * N) 操作。对于M ~ N,那就是O(N^2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多