• 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.

    这题要求比较严格,要求O(n)时间,O(1)空间,所以简单的方法排序, hashmap等都无法使用.这里主流的思路是使用count sort, 达到 nums[0] = 1, nums[1] = 2,....这样的效果.

    这样处理之后,再进行一次扫描, 第一个nums[i] != i+1的位置,就是first missing positive.代码如下:

    class Solution(object):
        def firstMissingPositive(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            #count sort, nums[0] = 1, nums[1] =2, nums[2] = 3
            n = len(nums)
            for i in xrange(n):
                while nums[i] > 0 and nums[i] <= n and nums[nums[i] - 1] != nums[i]: #之所以不用nums[i] - 1 != i, 是为了防止两个位置的元素相等
                    tmp = nums[nums[i] - 1]
                    nums[nums[i] -1] = nums[i]
                    nums[i] = tmp
                    #nums[i],nums[nums[i]-1] = nums[nums[i]-1], nums[i] #注意这里直接交换是错误的
            for i in xrange(n):
                if nums[i] != i+1:
                    return i+1
            return n+1

    每次swap,都至少可以使一个元素回到正确位置,所以是O(n)时间复杂度.

  • 相关阅读:
    JS加强学习-BOM学习03
    JS加强学习-BOM学习02
    JS加强学习-BOM学习01
    JS加强学习-DOM学习总结
    JS加强学习-DOM学习05
    JS加强学习-DOM学习04
    JS加强学习-DOM学习03
    《雨霖铃》——柳永
    《青玉案·元夕》——辛弃疾
    《沁园春·雪》——毛 泽东
  • 原文地址:https://www.cnblogs.com/sherylwang/p/5820965.html
Copyright © 2020-2023  润新知