一题一句:
参考:
友链
思路:通过交换数组元素,使得数组中第i位存放数值 = (i+1)。最后遍历数组,寻找第一个不符合此要求的元素,返回其下标。整个过程需要遍历两次数组,复杂度为O(n)。
下图以题目中给出的第二个例子为例,讲解操作过程。
public class Solution {
public int firstMissingPositive(int[] nums) {
int i=0;
while(i < nums.length){
if(nums[i] != i+1 && nums[i] >=1 && nums[i]<= nums.length && nums[nums[i]-1] != nums[i]){
int temp = nums[i];
nums[i] = nums[temp-1];
nums[temp-1] = temp;
}else{
i++;
}
}
for(i=0;i