给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 2
示例 3:
输入: [7,8,9,11,12]
输出: 1
提示:
你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-missing-positive
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
O(nlogn)
class Solution: def firstMissingPositive(self, nums: List[int]) -> int: if not nums:return 1 nums.sort() if nums[0]>1:return 1 if nums[-1]<1:return 1 if nums[-1]==1:return 2 for i in range(len(nums)): if nums[i]>=1: if i>0: if nums[i-1]<=0 and nums[i]>1: return 1 if i==len(nums)-1: return nums[i]+1 elif:nums[i+1]-1>nums[i]: return nums[i]+1
O(n)
class Solution: def firstMissingPositive(self, nums: List[int]) -> int: if not nums:return 1 length =len(nums) if length == 1: if 1 in nums: return 2 else: return 1 i=0 temp = 0 ma = max(nums) while i < length: if nums[i] <= 0 or nums[i] == i or nums[i] >=length or nums[nums[i]] == nums[i]: i += 1 else: nums[nums[i]],nums[i] = nums[i],nums[nums[i]] for i in range(1,length): if nums[i] != i: return i if ma == length: return length+1 return nums[-1] +1
好像这个也是O(n)没毛病。。。
class Solution: def firstMissingPositive(self, nums: List[int]) -> int: nums=set(nums) for i in range(1,2**31): if i not in nums: return i