题目描述
https://leetcode-cn.com/problems/first-missing-positive/
思路题解
方法一:仿哈希表
时间复杂度 :O(3N)=O(N)
空间复杂度:O(1)
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
n=len(nums)
for i in range(n):
if nums[i]<=0:
nums[i]=n+1
for i in range(n):
if abs(nums[i])<=n:
nums[abs(nums[i])-1]=-1*abs(nums[abs(nums[i])-1])
for i in range(n):
if nums[i]>0:
return i+1
return n+1
方法二:置换法
时间复杂度 :O(2N)=O(N)
空间复杂度:O(1)
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
n=len(nums)
for i in range(n):
while 1<=nums[i]<=n and nums[i]!=nums[nums[i]-1]:
nums[nums[i]-1],nums[i]=nums[i],nums[nums[i]-1]
for i in range(n):
if nums[i]!=i+1:
return i+1
return n+1