每日一题--1

41. 缺失的第一个正数

难度困难506收藏分享切换为英文关注反馈

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

提示:

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

示例 1:

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

示例 2:

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

示例 3:

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

 

思路:看到第一眼,脑子想到的是位图,创建长度为n的数组,将nums里大于0小于size的数字插入到对应位置,然后遍历位图数组,找到第一个为0的数的位置,若找不到返回数组长度+1,但是看到有空间要求,这么做空间复杂度为o(n),不符合。

数以更换了思路,依旧是遍历整个数组,将nums里大于0小于size的数字交换到对应位置,若发生交换,在原位置上再进行一次判断是否需要重新交换。附上代码

class Solution(object):
    def firstMissingPositive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        # result=[0 for i in range(len(nums))]
        i=0
        while(i<len(nums)):
            if nums[i]>0 and nums[i]<len(nums) and  nums[i] != nums[nums[i]-1]:
                temp=nums[nums[i]-1]
                nums[nums[i]-1]=nums[i]
                nums[i] =temp
                i=i-1
            i=i+1
        for i in range(len(nums)):
            if i+1!=nums[i]:
                return i+1
        return len(nums)+1
a=[-1,4,2,1,9,10]
print(Solution.firstMissingPositive(1,a))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章