Python代码疑问:输出相同的两段代码为何一段触发Time Limit Exceeded?
两段CodeChef Python代码的差异分析
问题背景
我在CodeChef练习Python编程时,自己编写的解决方案触发了Time Limit Exceeded(超时)错误,但其他用户提交的、输出结果完全相同的代码却能正常通过。以下是两段代码及核心差异分析:
我的代码
t = int(input()) for _ in range(t): n = int(input()) summ = 0 count = 0 for i in range(1, n+1): summ +=i count +=1 if summ%2==0: print(n) else: print(n-1)
其他用户的代码
t = int(input()) for _ in range(t): n = int(input()) sumN = (n*(n+1))//2 if sumN%2==0:print(n) else:print(n-1)
核心差异
1. 求和逻辑的时间效率天差地别
- 你的代码通过内层循环累加计算1到n的和,时间复杂度为
O(t*n)。当测试用例中的n取值很大(比如10^5或更高)时,循环会执行几十万甚至上百万次,直接导致运行时间超出题目限制。 - 另一段代码用等差数列求和公式直接计算:
n*(n+1)//2,这是数学推导出来的常数时间计算方式,时间复杂度仅为O(t)。不管n多大,每组测试用例只需要一次算术运算,效率碾压循环累加。
2. 冗余代码
你的代码中定义了count变量,但全程没有使用,属于无效冗余代码,虽然不影响功能,但完全可以删除。
3. 代码简洁性(非性能关键)
另一段代码将条件判断和打印语句合并为一行,代码更紧凑,但这不是解决超时问题的核心原因,关键还是求和方式的优化。
内容的提问来源于stack exchange,提问作者Saqib
相关产品推荐
相关产品推荐

