每日一題--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))

 

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