哈希表
思路:
把数组本身作为哈希表,数组内每个元素的值作为索引,将对应位置的值转换为负数,通过判断正负来判断对应值是否出现过。
①如果数组中不存在1,返回1。如果存在1,数组大小为1,返回2。
②把数组中的负数和0还有大于数组数量的值变为1
③遍历数组,把当前位置值的值作为下标,找到下标对应的值取负。如果值等于数组数量,则把第0位值取负。(这里0的位置是用来判断特殊情况,比如下标1-(n-1)值都找到,但是n值没找到,返回n;如果n值也找到,那么返回n+1)
④从下标1开始遍历数组,找到下标对应值为正的,返回下标值
例如:
[-1,-2,1,2,0]
=>[1,1,1,2,0]
=>[1,-1,-1,1,2,0]
=>3
[4,3,2,1]
=>[4,3,2,1]
=>[-4,-3,-2,-1]
=>5
[3,0,1,2]
=>[3,1,1,2]
=>[3,-1,-1,-2]
=>4
class Solution: def firstMissingPositive(self, nums): n = len(nums) if 1 not in nums: return 1 if n == 1: return 2 for i in range(n): if nums[i] <= 0 or nums[i] > n: nums[i] = 1 for i in range(n): a = abs(nums[i]) if a == n: nums[0] = - abs(nums[0]) else: nums[a] = - abs(nums[a]) for i in range(1, n): if nums[i] > 0: return i if nums[0] > 0: return n return n + 1