思路:要求时间复杂度线性,空间复杂度常量。不能使用计数排序。只能遍历查看然后交换位置。找到每个值正确的位置,然后再遍历查询看到第一个不对应的就是缺省值
public class Solution {
public int firstMissingPositive(int[] nums) {
for (int i = 0; i < nums.length; i++) {
if (nums[i]!=i+1) {
if (nums[i]<=nums.length&&nums[i]>0&&nums[nums[i]-1]!=nums[i]) {
int k=nums[nums[i]-1];
nums[nums[i]-1]=nums[i];
nums[i]=k;
i--;
}
}
}
for (int i = 0; i < nums.length; i++) {
if (nums[i]!=i+1) {
return i+1;
}
}
return nums.length+1;
}
}
耗时:312ms,中游水平