根据参考答案给出的一点提示,完成代码。
public static int firstMissingPositive(int[] nums) {
int ret = 1;
boolean flag = false;
int posCount = 0;
for (int i = 0; i < nums.length; i++)
if (nums[i] > 0)
posCount++;
for (int i = 0; i < nums.length; i++)
{
int t = nums[i];
while (nums[t-1] != t && t > 0 && t <= posCount) // 被覆盖的数字可能是本应该出现在当前位置之前,因此需要循环放置该数字
{
int tmp = nums[t-1];
nums[t-1] = t;
t = tmp;
}
}
for (int i = 0; i < posCount; i++)
{
if (nums[i] != i + 1)
{
ret = i+1;
flag = true; // 表示正数序号范围内是否是连续的
break;
}
}
if (flag)
return ret;
return posCount + 1;// 超过posCount 或者 超过边界
}