1.题目描述
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。
示例 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.解题思路
判断一个元素是否在哈希表中和判断一个元素是否在列表中的复杂度是不一样的
方法三:将数组视为哈希表
参考链接:
作者:liweiwei1419
链接:https://leetcode-cn.com/problems/first-missing-positive/solution/tong-pai-xu-python-dai-ma-by-liweiwei1419/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3.代码实现
class Solution(object):
def firstMissingPositive(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
for i in range(n):
# 要判断这个数是否可以被交换
while nums[i]>0 and nums[i]<=n and nums[i]!=nums[nums[i]-1]:
self.swap(nums,i,nums[i]-1)
for i in range(n):
if nums[i]!=i+1:
return i+1
return n+1
def swap(self,nums,i,j):
nums[i],nums[j] = nums[j],nums[i]