Leetcode
41. First Missing Positive
Given an unsorted integer array, find the smallest missing positive integer.
Example 1:
Input: [1,2,0] Output: 3
Example 2:
Input: [3,4,-1,1] Output: 2
Example 3:
Input: [7,8,9,11,12] Output: 1
Note:
Your algorithm should run in O(n) time and uses constant extra space.
代码如图所示
class Solution(object):
def firstMissingPositive(self, nums):
if nums:
max_num = max(nums)
i = 0
l = list(range(0, max_num + 2))
while i < len(nums):
if (nums[i] >= 1):
l[nums[i]] = -1
i += 1
i = 1
while i < max_num + 2:
if l[i] != -1:
return l[i]
i += 1
else:
return 1
题解:题目的意思是需要寻找一个列表中缺失的最小正整数。
先寻找给定列表nums中的最大数字max_num。
开一个大小为max_num+2数组 l(当然max_num可能是负数,这里leetcode上似乎没有考虑到),
用下标表示是否nums中是否存在这个数字,若存在这个数n,则将l[n]的值置为-1。
考虑到可能给定列表中缺失的最小正整数可能比列表中的最大数字大,因此开的数组大小比最大数字大1
当然需要判断列表是否为空,若为空,由定义自然返回1。
遍历一次之后,再遍历一次,从l的下标1开始,碰到一个列表下标对应的值不为-1的,那么这个数就是要找的数。