MST

星途 面试题库

面试题:Python列表添加元素时的性能分析及复杂场景应用

已知有一个非常大的列表`big_list`,长度可能达到数十万甚至更多,以及另一个较短的列表`small_list`。现在要将`small_list`中的元素添加到`big_list`中,要求尽可能高效地完成此操作。同时,需要考虑如果在添加元素的过程中,要保证添加后列表中的元素是唯一的(去除重复元素),该如何实现?请分析不同添加方法在这种复杂场景下的时间和空间复杂度,并给出具体的代码实现。
29.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

分析

  1. 直接添加并去重:将 small_list 直接添加到 big_list 后,使用集合(set)去重。时间复杂度为 O((m + n) + (m + n)),其中 m 是 big_list 的长度,n 是 small_list 的长度,第一个 (m + n) 是添加操作,第二个 (m + n) 是集合去重操作。空间复杂度为 O(m + n),因为集合需要额外的空间存储去重后的元素。
  2. 先合并为集合再转回列表:将 big_listsmall_list 转换为集合,合并后再转回列表。时间复杂度为 O(m + n),空间复杂度为 O(m + n)。
  3. 遍历添加并检查重复:遍历 small_list,逐个检查是否在 big_list 中,不存在则添加。时间复杂度为 O(m * n),空间复杂度为 O(1),因为不需要额外的空间存储。

在列表非常大的情况下,先合并为集合再转回列表的方法效率最高。

代码实现

big_list = [1, 2, 3, 4, 5] * 100000
small_list = [4, 5, 6, 7]

# 先合并为集合再转回列表
big_set = set(big_list)
small_set = set(small_list)
unique_set = big_set.union(small_set)
result_list = list(unique_set)

复杂度总结

方法时间复杂度空间复杂度
直接添加并去重O((m + n) + (m + n))O(m + n)
先合并为集合再转回列表O(m + n)O(m + n)
遍历添加并检查重复O(m * n)O(1)