首页 > 代码库 > First Missing Positive
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)时间复杂度.
First Missing Positive
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。