给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
进阶:你可以实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-missing-positive
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
错解:
错就在于,会覆盖掉原数组,导致有些数字没法遍历到。
class Solution: def firstMissingPositive(self, nums: List[int]) -> int: for i in nums: if i>0 and i<=len(nums): nums[i-1]=i for k,v in enumerate(nums): if v!=(k+1): return (k+1) return len(nums)+1
正解:
为了保留原数组,要交换位置
class Solution: def firstMissingPositive(self, nums: List[int]) -> int: for i in nums: while i>0 and i<=len(nums)and i!=nums[i-1]: nums[i-1],i=i,nums[i-1] for k,v in enumerate(nums): if v!=(k+1): return (k+1) return len(nums)+1