Leetcode041 first-missing-positive

缺失的第一个正数

题目描述:

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

示例1

输入: [1,2,0]
输出: 3

示例2

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

说明:

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


解题思路:

我们核心的算法思想是这样的,将每一个正整数放到nums数组中的对应正数的位置,比如数字1放到nums[0]位置上,数字2放到nums[1]的位置上,如果是负数或者是比数组长度大的数字,就会自动排到数组的最后几位,这样所有数字都放好以后,我们只需要找到nums[i] != (i + 1)的第一个数,就是我们所需要的数字
而将数字放到nums中合适的位置,可以通过nums[nums[i] - 1] != nums[i]进行判断是否相等,然后进行换位


Python源码:

from typing import List


class Solution:
    def firstMissingPositive(self, nums: List[int]) -> int:
        for i in range(len(nums)):
            while 0 < nums[i] <= len(nums) and nums[nums[i] - 1] != nums[i]:
                nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]
        for i in range(0, len(nums)):
            if nums[i] != (i + 1):
                return i + 1
        return len(nums) + 1
        

欢迎关注我的github:https://github.com/UESTCYangHR

猜你喜欢

转载自blog.csdn.net/dzkdyhr1208/article/details/89331003