给定一个整数数组,找出数组中不存在的最小的正整数。该数组还可以包含重复数和负数。Python实现

原题如下:

思路:首先我们的目标是寻找一个从k=1开始最小且不在数组内的的正整数,返回这个正整数。那么我们首先要考虑的就是将整数数组内的负数去除,然后遍历得到的数组,从一开始比较比较数组中最小的数,如果小于数组中最小的数,就输出k=1,否则删除数组中的这个数,比较第二比较小的数,此时k+=1。一次类推开始执行,直到输出k之后,跳出遍历循环,结束程序。


a =[4,5,0,1,-2,-3]
c = []
#去除负数
for i in a:
    if i > 0:
        c.append(i)

#如果c数组为空的话,最小正整数为1
if len(c)==0:
    print(1)
else:
#否则,取出数组中最小的值
    b = min(c)
    k = 1
#开始比较
    while k <= b:
        if k < b:
            print(k)
            break
        while k == b:
            #再去除最小,开始比较
            c.remove(b)
            try:
                b = min(c)
            except ValueError as error:
                print(b+1)
            k =  k + 1

嗯,经过一晚上的讨论,还有一下实现方式。2018-7-24实现。 

def serche(list1):
    num = 1
    while True:
        if num not in list1:
            print(num)
            break
        num+=1
s=[1,1,2,3,4,4,4]

serche(s)

 

如有更好的解答方法,请分享一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值