LeetCode【41】缺失的第一个正数

题目:

LeetCode【41】缺失的第一个正数_第1张图片

分析:
第i个位置的数,如果再数组 0到length-1范围内,则将其放到对应的位置;
再遍历一遍数组,找到第一个不在位置i的正数数字,即为所求

思路:https://blog.csdn.net/weixin_45271005/article/details/127981903

[1, 2, 4, 5, 3, 6]
0 1 2 3 4 5

nums[2] != 2+1 => 4 != 3

nums[2] != nums[4-1] => 4 != 5

所以,要将 4放回到属于自己的位置5上去,为什么要做这个判断?因为5所在的位置万一也是4,那就没法换了。

代码:

private static int firstMissingPositive(int[] nums) {
        int len=nums.length,temp;
        for (int i=0;i<len;i++){
            while ((nums[i]>=1&&nums[i]<=len)&&nums[i]!=i+1&nums[i]!=nums[nums[i]-1]){  
                temp=nums[i];
                nums[i]=nums[nums[i]-1];
                nums[temp-1]=temp;
            }
        }
        for (int i=0;i<len;i++){
            if (nums[i]!=i+1){
                return i+1;
            }
        }
        return len+1;
    }

你可能感兴趣的:(leetcode,算法,职场和发展)