当前位置 博文首页 > 没有感情的刷题机器:leetcode41.缺失的第一个正数

    没有感情的刷题机器:leetcode41.缺失的第一个正数

    作者:[db:作者] 时间:2021-09-04 21:24

    1.题目描述

    给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。

    ?

    示例?1:

    输入: [1,2,0]
    输出: 3
    示例?2:

    输入: [3,4,-1,1]
    输出: 2
    示例?3:

    输入: [7,8,9,11,12]
    输出: 1
    ?

    提示:

    你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/first-missing-positive
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    2.解题思路

    判断一个元素是否在哈希表中和判断一个元素是否在列表中的复杂度是不一样的

    方法三:将数组视为哈希表

    0041-14.png

    参考链接:

    作者:liweiwei1419
    链接:https://leetcode-cn.com/problems/first-missing-positive/solution/tong-pai-xu-python-dai-ma-by-liweiwei1419/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    3.代码实现

    class Solution(object):
        def firstMissingPositive(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            n = len(nums)
            for i in range(n):
                # 要判断这个数是否可以被交换
                while nums[i]>0 and nums[i]<=n and nums[i]!=nums[nums[i]-1]:
                    self.swap(nums,i,nums[i]-1)
            for i in range(n):
                if nums[i]!=i+1:
                    return i+1
            return n+1
        def swap(self,nums,i,j):
            nums[i],nums[j] = nums[j],nums[i]
    

    ?

    cs