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.
題意分析:
本題是給一個整數的數組,讓你按順序找出第一個缺失的正整數。也就是說從1開始查找,找到了1再找2,這樣一直找到缺失的第一個正整數。比如[1,2,0]
return 3
,[3,4,-1,1]
return 2
. 要求時間復雜度O(n) ,空間復雜度為常數。
解答:
我們要注意到這樣一個事實,數組的下標是有標記意義的。所以我們可以把數字放到相應的下標下面,這樣理想情況下所有的正數都能一一對應到0~N-1的下標中,這里面可以使用交換來實現。這樣一次循環之后,正整數i應該交換到了i-1下標對應的元素中。然后在進行一次循環查找第一個不符合的元素輸出即可。
AC代碼:
class Solution(object): def firstMissingPositive(self, nums): i, n = 0, len(nums) while i < n: if nums[i] > 0 and nums[i] <= n and nums[i] != nums[nums[i] - 1]: # swap temp = nums[i] nums[i] = nums[nums[i] - 1] nums[temp - 1] = temp else: i += 1 for i, v in enumerate(nums): if v != i + 1: return i + 1 return n + 1