41. 缺失的第一个正数
难度:困难
问题描述:
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
示例 1:
输入:nums = [1,2,0]
输出:3
示例 2:
输入:nums = [3,4,-1,1]
输出:2
示例 3:
输入:nums = [7,8,9,11,12]
输出:1
解决思路在程序的注释中有明确说明,应该够清楚的了。程序如下:
#输入数组,形如[1,2,0,-1]
nums=eval(input('pls input a array:'))
#从原数组中提取出所有的正整数元素组成新数组b
b=list(x for x in nums if x>0)
#通过函数找出其中没有出现的最小正整数
def zx(b):
#如果最小的整数比1还大,则返回没有出现的最小正整数为1
if min(b)>1:
return 1
#如果最小整数不比1大,则从1开始到最大值加1,查找这些元
#素在b中有没有,如果没有,则返回此数
else:
#加2的原因:如果从1到max(b)都有,则最小的正整数是max(b)+1
for i in range(1,max(b)+2):
if i in b:
continue
else:
return i
print(zx(b))
运行实例1:
pls input a array:[1,-1,3,5,7]
2
运行实例2:
pls input a array:[1,2,0]
3
运行实例3:
pls input a array:[7,8,9,11,12]
1
运行实例4:
pls input a array:[1,2,3,4]
5
感悟:算法学习和程序设计让我们的逻辑思维更加清晰、严密,能够直指问题的本质,因而对结果也有更加准确的把握。