如果s的当前元素小于t的当前元素,则应该进一步考虑s的下一个元素;他中当前元素较小的也是同样的道理;只有两个两个列表的当前元素相等时,将其加入到交集中。假设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