简洁明了的求解LeetCode题库第41题---缺失的第一个正数

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

感悟:算法学习和程序设计让我们的逻辑思维更加清晰、严密,能够直指问题的本质,因而对结果也有更加准确的把握。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值