为了知道第一个缺失的正数,可以将所有的整数按照顺序放到数组里面,然后遍历数组,哪个地方不是对应的正数,那么就缺失了这个地方的对应的正数。
需要放进数组进行排列的数据需要满足要求:正数、大小小于等于数组大小的数
如何进行排列,只需要遍历到某个索引,然后将这个地方的数据放到合适的地方就行了。应当让这两个数交换:nums[i] 和nums[nums[i]-1],之所以减一就是为了满足上述要求。那么交换一次就行了吗?不行,因为交换过来的数不一定就是放到了合适的位置,所以需要while循环
class Solution {
public int firstMissingPositive(int[] nums) {
for(int i = 0;i<nums.length;i++){
int cur = nums[i];
while(cur>0&&cur<=nums.length&&cur!=nums[cur-1]){
int temp = cur;
nums[i] = nums[cur-1];
nums[cur-1] = cur;
cur = nums[i];
}
}
for(int i = 0;i<nums.length;i++){
if(nums[i]!=i+1){
return i+1;
}
}
return nums.length+1;
}
}