//2.走到底,说明正数1-nums.lemgth-1都存在,此时判断nums[0]是否为nums.lemgth,是则答案为nums.lemgth+1,不是则为nums.lemgth
class Solution {
public int firstMissingPositive(int[] nums) {
//特殊情况特殊处理
if(nums.length==0||nums==null){return 1;}
if(nums.length==1){
if(nums[0]<=0){return 1;}
if(nums[0]==1){return 2;}
else{return 1;}
}
for(int i=0;i<nums.length;){
if(nums[i]<nums.length&&nums[i]>=0){
if( nums[i]!=i&&nums[i]!=nums[nums[i]] ){swap(nums,i,nums[i]); continue; }//把下标和值相匹配 同时考虑元素存在重复情况,当下标与值不匹配,但值所在的下标与这个下标内的值匹配不用交换位置
}
i++;
}
for(int i=1;i<nums.length;i++){
if(nums[i]!=i){ return i;} //循环一次,下标与值不同的第一个元素就是缺失的数字
}
if(nums[0]==nums.length){return nums.length+1;} //循环退出,考虑下标0内元素
return nums.length;
}
public static void swap(int[] nums,int i,int j){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}