LeetCode刷题|缺失的第一个正数

【LeetCode刷题|缺失的第一个正数】41.缺失的第一个正数
题解:原地hash法,解读题意我们可以知道,最小的正整数肯定出现在[1,n+1]之间,为什么这么说?假设1,2,3,4,5连续的5个数,我们可以知道最小的肯定是6,但如果是不连续的,那肯定最小的就是序列中缺失的那个。那么我们的思路就是如果出现了非正整数,那么我们令非正整数等于n+1(只要是大于n的数都行),这样将它排除在外。如果是x正数,我们就将其标记为已出现,具体做法就是将nums[x-1]标记为负数
(nums[x-1]=-Math.abs(nums[x-1])),利用绝对值避免出现重复的数打乱标记,最后遍历我们的索引下标就行了。

class Solution {public int firstMissingPositive(int[] nums) {int len=nums.length; //将小于等于0的置为len+1, for(int i=0; i0){return i+1; } } //没有找到,则代表序列是连续的,则返回n+1即可 return len+1; } }

    推荐阅读