41. 缺失的第一个正数
题目描述
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
示例
输入:nums = [1,2,0]
输出:3
思路
原地哈希
3轮遍历,第一轮把负数都改成length+1
第二轮遍历,如果数字num在1-length之间,就找到nums对应的下标把nums[num-1]改成负数
第三轮遍历,返回 第一个正数的坐标+1,如果都是负数,那么返回length+1
代码
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
length = len(nums)
for i, num in enumerate(nums):
if num <= 0:
nums[i] = length + 1
for i, num in enumerate(nums):
if abs(num) >= 1 and abs(num) <= length:
nums[abs(num) - 1] = -1 * abs(nums[abs(num) - 1])
for i, num in enumerate(nums):
if num > 0:
return i + 1
return length + 1
题目来源
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-missing-positive
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。