【LeetCode題意分析&解答】41. First Missing Positive


Given an unsorted integer array, find the first missing positive integer.

For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.

Your algorithm should run in O(n) time and uses constant space.

題意分析:

  本題是給一個整數的數組,讓你按順序找出第一個缺失的正整數。也就是說從1開始查找,找到了1再找2,這樣一直找到缺失的第一個正整數。比如[1,2,0] return 3,[3,4,-1,1] return 2. 要求時間復雜度O(n) ,空間復雜度為常數。

解答:

  我們要注意到這樣一個事實,數組的下標是有標記意義的。所以我們可以把數字放到相應的下標下面,這樣理想情況下所有的正數都能一一對應到0~N-1的下標中,這里面可以使用交換來實現。這樣一次循環之后,正整數i應該交換到了i-1下標對應的元素中。然后在進行一次循環查找第一個不符合的元素輸出即可。

AC代碼:

class Solution(object):
    def firstMissingPositive(self, nums):
        i, n = 0, len(nums)
        while i < n:
            if nums[i] > 0 and nums[i] <= n and nums[i] != nums[nums[i] - 1]:
                # swap
                temp = nums[i]
                nums[i] = nums[nums[i] - 1]
                nums[temp - 1] = temp
            else:
                i += 1
        for i, v in enumerate(nums):
            if v != i + 1:
                return  i + 1
        return n + 1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM