以下代码适用于hackerrank问题:(默认情况下A和B将获得非重复和离散数据)n,m = map(int,input().split())arr = list(map(int,input().split()))A = set(map(int,input().split()))B = set(map(int,input().split()))count = 0for x in arr: if x in A: count+=1 if x in B: count-=1print(count)但下一个在 4 个测试用例中显示时间错误:n,m = map(int,input().split())arr = list(map(int,input().split()))A = list(map(int,input().split()))B = list(map(int,input().split()))count = 0for x in arr: if x in A: count+=1 if x in B: count-=1print(count)list 和 set 的时间复杂度如何急剧变化,它们是如何工作的?
2 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
改变的行是:
A = list(map(int,input().split())) B = list(map(int,input().split()))
对于好的情况,您使用set
而不是list
. 当您这样做时,这会产生影响:
if x in A: if x in B:
因为这会检查一个元素是否在列表/集中。
对于列表,这是 O(n),因为您必须执行线性搜索,因为它是一个无序容器。
对于集合,在 Python 中它们是使用哈希表实现的,这意味着您可能会进行平均 O(1) 时间查找,但请注意,文档并未明确说明使用哪种哈希。因此,您必须假设 O(n) 的最坏情况。
添加回答
举报
0/150
提交
取消