41. First Missing Positive(找到陣列中未出現的最小正整數)

FreeeLinux發表於2017-02-04

Total Accepted: 87074
Total Submissions: 348588
Difficulty: Hard
Contributors: Admin
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.

方法:
遍歷一遍,把正確合法的正整數方在正確的位置上即可。比如我們找到元素5,就把5換到A[4]上,因為陣列從0下標開始。最終結果陣列A[i] != i+1 的就是該位置上的正整數沒有出現過,返回i+1即可。

程式碼如下:

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

呵呵,人生苦短,我用Python。

相關文章