4.23python Leetcode array 41

Leetcode

41First Missing Positive

Given an unsorted integer array, find the smallest missing positive integer.

Example 1:

Input: [1,2,0]
Output: 3

Example 2:

Input: [3,4,-1,1]
Output: 2

Example 3:

Input: [7,8,9,11,12]
Output: 1

Note:

Your algorithm should run in O(n) time and uses constant extra space.


代码如图所示

class Solution(object):
    def firstMissingPositive(self, nums):
        if nums:
            max_num = max(nums)
            i = 0
            l = list(range(0, max_num + 2))
            while i < len(nums):
                if (nums[i] >= 1):
                    l[nums[i]] = -1
                i += 1

            i = 1
            while i < max_num + 2:
                if l[i] != -1:
                    return l[i]
                i += 1
        else:
            return 1


题解:题目的意思是需要寻找一个列表中缺失的最小正整数。

先寻找给定列表nums中的最大数字max_num。

开一个大小为max_num+2数组 l(当然max_num可能是负数,这里leetcode上似乎没有考虑到),

用下标表示是否nums中是否存在这个数字,若存在这个数n,则将l[n]的值置为-1。

考虑到可能给定列表中缺失的最小正整数可能比列表中的最大数字大,因此开的数组大小比最大数字大1

当然需要判断列表是否为空,若为空,由定义自然返回1。

遍历一次之后,再遍历一次,从l的下标1开始,碰到一个列表下标对应的值不为-1的,那么这个数就是要找的数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值