如果s的当前元素小于t的当前元素,则应该进一步考虑s的下一个元素;如果s的当前元素大于t的当前元素,则应该考虑t的下一个元素;只有两个列表的当前元素相等时,将其加入到交集中。假设s、t中的元素个数分别为m和n,主循环的每次迭代总能处理掉两个集合中的至少一个元素,所以此算法的时间复杂度是O(m+n)。
def findIntersection(s,t):
s.sort()
t.sort()
r = []
i, j = 0, 0
while i < len(s) and j < len(t):
if s[i] < t[j]:
i += 1
elif s[i] > t[j]:
j += 1
else: #s[i] == t[j]
r.append(s[i])
i += 1
j += 1
return r