题目:
分析:
第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;}