缺失的第一个正数
题目描述:
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
示例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