排序列表缺失数字查找:Python代码输出与预期不符求助
问题排查与修复
你的代码核心问题是循环范围错误:
你用len(myArray)+1作为循环的结束值,对于输入[1,5,7,8],列表长度为4,所以循环只遍历1到4(range(1,5)),完全没覆盖到5到8之间的数字,自然找不到缺失的6。
修复后的代码
def missing_number(myArray): missingArray = [] # 取列表的起始和结束值作为循环范围 start = myArray[0] end = myArray[-1] # 遍历从start到end的所有整数 for i in range(start, end): if i not in myArray: missingArray.append(i) return missingArray case = [1, 5, 7, 8] print(missing_number(case)) # 输出: [2,3,4,6]
额外优化建议
因为i not in myArray在列表中是O(n)时间复杂度,如果列表很大,效率会很低。可以把原列表转成集合,将查找操作优化为O(1):
def missing_number(myArray): missingArray = [] start = myArray[0] end = myArray[-1] num_set = set(myArray) # 转成集合提升查找效率 for i in range(start, end): if i not in num_set: missingArray.append(i) return missingArray
内容的提问来源于stack exchange,提问作者Fazeel Ayaz
相关产品推荐
相关产品推荐

