41. 缺失的第一个正数

给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。

 

示例 1:

输入: [1,2,0]
输出: 3
示例 2:

输入: [3,4,-1,1]
输出: 2
示例 3:

输入: [7,8,9,11,12]
输出: 1
 

提示:

你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-missing-positive
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

O(nlogn)

class Solution:
    def firstMissingPositive(self, nums: List[int]) -> int:
        if not nums:return 1
        nums.sort()
        if nums[0]>1:return 1
        if nums[-1]<1:return 1
        if nums[-1]==1:return 2
        for i in range(len(nums)):
            if nums[i]>=1:
                if i>0:
                    if nums[i-1]<=0 and nums[i]>1:
                        return 1
                if i==len(nums)-1:
                    return nums[i]+1
                elif:nums[i+1]-1>nums[i]:
                        return nums[i]+1

 

 

O(n)

class Solution:
    def firstMissingPositive(self, nums: List[int]) -> int: 
        if not nums:return 1
        length =len(nums)
        if length == 1:
            if 1 in nums:
                return 2
            else:
                return 1
        i=0
        temp = 0
        ma = max(nums)
        
        while i < length:
            if nums[i] <= 0 or nums[i] == i or nums[i] >=length or nums[nums[i]] == nums[i]:
                i += 1
            else:
                nums[nums[i]],nums[i] = nums[i],nums[nums[i]]

        for i in range(1,length):
            if nums[i] != i:
                return i 
        
        if ma == length:
            return length+1
        return nums[-1] +1

 

好像这个也是O(n)没毛病。。。

class Solution:
    def firstMissingPositive(self, nums: List[int]) -> int: 
        nums=set(nums)
        for i in range(1,2**31):
            if i not in nums:
                return i

 

posted @ 2020-10-22 17:07  XXXSANS  阅读(78)  评论(0编辑  收藏  举报