如何优化Python程序以通过CSES习题1621的时间限制?
优化方案:将时间复杂度降至O(n)
你的代码超时的核心原因是时间复杂度过高:每次循环都要遍历整个列表删除相同元素,最坏情况下(所有元素均不重复)时间复杂度为O(n²),面对大数据量(如n=10^5)必然触发超时。
最优解法:利用集合自动去重
Python的set结构会自动过滤重复元素,直接获取集合的长度就是题目要求的不同元素数量,时间复杂度为O(n):
n = int(input()) integers = list(map(int, input().split())) print(len(set(integers)))
备选解法:统计元素频率
如果需要额外获取每个元素的出现次数,可以使用collections.Counter,最终取键的数量即可,同样保持O(n)时间复杂度:
from collections import Counter n = int(input()) integers = list(map(int, input().split())) print(len(Counter(integers)))
原代码问题补充
- 时间效率瓶颈:每次循环生成新列表都要遍历全部元素,重复操作导致时间开销呈指数级增长
- 语法错误:
count变量未初始化,运行时会抛出NameError
内容的提问来源于stack exchange,提问作者user20954198
相关产品推荐
相关产品推荐

