题目:
给你一个未排序的整数数组
nums
,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为
O(n)
并且只使用常数级别额外空间的解决方案。来源:力扣(LeetCode)
链接:力扣
示例:
示例 1:
输入:nums = [1,2,0]
输出:3
示例 2:输入:nums = [3,4,-1,1]
输出:2
示例 3:输入:nums = [7,8,9,11,12]
输出:1
解法:
先把列表中的正数留下,接着排序。如果此时列表长度为0或列表第1个元素不等于1,则返回1。如果列表只有1个元素且为1,则返回2。否则,遍历列表,如果当前值不比后一个值小1,说明比当前值大1的数不在列表中,返回当前值+1。
知识点:
1.列表生成式:variable = [expression for i in 序列 if …],比如a=[num for num in nums if num > 0],nums是列表,a是nums中大于0的数的列表。
2.len(str):返回字符串、列表、字典、元组等长度。
3.set([iterable]):iterable是可迭代对象,返回集合,集合具有无序性、唯一性。
代码:
class Solution: def firstMissingPositive(self, nums: List[int]) -> int: nums[:] = set([num for num in nums if num > 0]) nums.sort() if len(nums) == 0 or nums[0] != 1: return 1 if len(nums) == 1: return 2 for index, num in enumerate(nums[:-1]): if num + 1 != nums[index + 1]: return num + 1 return nums[-1] + 1