说实话感觉题目看了好几遍才懂这个意思,然后看了题解,觉得解法真的很厉害。
假设数组长度为N,那么没有出现的整数一定是在[1,N+1]中。如果[1,N]都出现了,那没有出现的正整数就是N+1。
1、将数组中所有小于等于0以及大于数组长度N的数都改为N+1;
2、遍历数组中的数,可能有的数被打了标记。如果|x|在(1,N)中,那么就把数组中|x|-1位置的数变成负数。
3、如果数组中每一个数都是负数,那么答案就是N+1,否则答案就是第一个正数的下标加1.
1 def firstMissingPositive(nums): 2 n =len(nums) 3 for i in range (n): 4 if nums[i] <= 0 or nums[i] > n+1: 5 nums[i] = n+1 6 for i in range(n): 7 num = abs(nums[i]) 8 if num <= n: 9 nums[num-1] = -abs(nums[num-1]) 10 for i in range(n): 11 if nums[i]>0: 12 return i+1 13 return n+1
标签:正整数,nums,41,range,num,数组,缺失 From: https://www.cnblogs.com/wanxueyu/p/16743823.html