每日一题力扣41巨坑

给你一个未排序的整数数组 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

 

posted @ 2021-02-24 23:27  小千北同学超爱写代码  阅读(66)  评论(0编辑  收藏  举报