有两个索引 i-1和nums[i],如果i-1==num[i],说明是同一个索引,如果不是分别判断两个索引上的点是否满足索引排序的条件。都不满足的话,就进行交换。
class Solution {
public int firstMissingPositive(int[] nums) {
if(nums==null||nums.length==0)return 1;
int i = 0 ;
while(i<nums.length)
{
if(nums[i]>0&&nums[i]<nums.length)
{
while(nums[i]!=i+1&&nums[nums[i]-1]!=nums[i])
{
int temp = nums[nums[i]-1];
nums[nums[i]-1]=nums[i];
nums[i]=temp;
// now nums[nums[i]-1]==nums[i];check nums[i] ;
// 可以保证nums[i]为索引的数都放到了对应的位置。
if(nums[i]<=0||nums[i]>=nums.length)
break;
}
}
i++;
}
for(int j = 0 ;j<nums.length;j++)
{
if(nums[j]!=j+1)
return j+1;
}
return nums.length+1;
}
}