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