https://leetcode-cn.com/problems/first-missing-positive/

# -*- coding:utf-8 -*-

class Solution(object):
    def firstMissingPositive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)
        temp_list = [0 for _ in range(n)]
        for each in nums:
            if each <= n and each > 0:
                temp_list[each - 1] = each
        for i in range(n):
            if temp_list[i] != i + 1:
                return i + 1
        return n + 1
if __name__ == '__main__':
    nums = [1]
    print(Solution().firstMissingPositive(nums))

思路:这道题首先生成一个长度为n的列表,然后遍历整个数组,将>0并且<n的数字放入列表中,如果有位置为初始值0,则说明缺少这个,如果列表没有缺失位置,则说明缺失值为n+1。

这个方法空间和时间复杂度都为O(n)。但是题里说线性空间,那么我们可以提前遍历一遍数组,求出正数和个数,这样就可以把n缩小,空间复杂度也将为了常数。

这是典型的时间换空间的做法,实际上不做处理也可以达到一个很好的效果。

分类: 算法

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注