修正列表ground值求解代码:break后终止,禁止输出max(b)
问题解决与代码修改
问题分析
原代码的核心问题是:当找到等于目标值k的元素并执行break后,后续的print(max(b))仍会执行,导致输出错误结果;同时未处理没有任何元素小于或等于k的边界情况(此时会因b为空触发max()函数报错)。
修改后的代码
n, k = map(int, input().split()) a = list(map(int, input().split())) b = [] for i in range(n): if k == a[i]: print(i) break elif a[i] < k: b.append(i) else: # 循环未触发break,说明未找到等于k的元素 if b: print(max(b)) else: # 无任何元素小于k,输出-1 print(-1)
关键修改说明
- 利用for循环的else分支:Python中
for循环的else块仅在循环正常结束(未被break中断)时执行,这样找到等于k的元素并break后,就不会再执行后续的print(max(b))。 - 处理边界情况:增加对
b是否为空的判断,若所有元素都大于k,直接输出-1,避免max()函数报错。 - 适配输入要求:替换硬编码的测试数据,改为从标准输入读取
n、k和列表元素,符合题目输入规范。
复杂度验证
- 时间复杂度:O(n),仅遍历一次列表,每个元素处理时间为常数。
- 空间复杂度:O(n),最坏情况下(所有元素都小于
k),列表b会存储所有元素的索引,满足题目约束。
内容的提问来源于stack exchange,提问作者Nithish Duraikannan
相关产品推荐
相关产品推荐

