为何我的寻找缺失最小正整数的Python代码未通过全部测试用例?
问题分析:寻找缺失的最小正整数
编码挑战要求
编写函数 def solution(A),给定一个包含N个整数的数组A,返回数组中未出现的最小正整数(大于0)。
示例
- 输入
A = [1, 3, 6, 4, 1, 2],返回5; - 输入
A = [1, 2, 3],返回4; - 输入
A = [-1, -3],返回1。
我的代码
def solution(A): A.sort() B = list(set(A)) for x in range(B[0],B[-1]): if x not in A and x>0: return x if B[-1]<0: return 1 else: return B[-1]+1
遗漏的测试场景与问题分析
你的代码主要遗漏了以下关键场景:
- 未优先检查1是否存在:只要数组中没有1,无论其他正整数多大,答案都是1。比如输入
A = [2,3,4]、A = [0,5]、A = [2,2]时,你的代码会返回最大数+1,但正确结果应为1。这是因为你的循环从数组的最小元素开始,完全跳过了对1的检查。 - 空数组处理缺失:如果输入
A = [],代码会因B[0]和B[-1]索引越界直接报错,而正确结果应为1。 - 循环范围逻辑缺陷:当数组的最小元素大于1时,循环从该元素开始,不会检查1到该元素之间的所有数,导致遗漏最小的缺失正整数。
修正后的代码示例
def solution(A): if not A: return 1 # 过滤正整数、去重并排序 positive_nums = sorted(set(num for num in A if num > 0)) if not positive_nums: return 1 # 1不存在直接返回1 if positive_nums[0] != 1: return 1 # 检查连续正整数的间隙 for i in range(len(positive_nums)-1): if positive_nums[i+1] - positive_nums[i] > 1: return positive_nums[i] + 1 # 所有正整数连续,返回最后一个+1 return positive_nums[-1] + 1
内容的提问来源于stack exchange,提问作者plshelpmeout
相关产品推荐
相关产品推荐

