给你一个未排序的整数数组 nums
,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n)
并且只使用常数级别额外空间的解决方案。
解法一:
先对数组进行排序,然后比较数组中的值和变量p的关系,当数组中的值大于零并且小于变量时,说明变量为比数组小的正整数,让变量p从1开始计算,直接跳出循环,如果数组中的值大于零并且等于p时,说明p是出现的正整数,所有让它进行加一计算
class Solution {
public int firstMissingPositive(int[] nums) {
int p=1;
Arrays.sort(nums);
for(int i=0;i<nums.length;i++){
if(nums[i]>0){
if(nums[i]==p){
p++;
}else if(nums[i]>p){
break;
}
}
}
return p;
}
}
解法二(大神解法)
class Solution {
public int firstMissingPositive(int[] nums) {
int n = nums.length;
int[] res = new int[n + 1];
for (int num : nums) {
if (num > 0 && num <= n) res[num] = 1;
}
int i = 1;
for (; i <= n; i++) {
if (res[i] == 0) break;
}
return i;
}
}