41-First Missing Positive
Given an unsorted integer array, find the smallest missing positive integer.
Example 1:
Input: [1,2,0]
Output: 3
Example 2:
Input: [3,4,-1,1]
Output: 2
Example 3:
Input: [7,8,9,11,12]
Output: 1
嗯,这个题的意思就是给一个数组,然后找出数组里面缺失的最小的正数,思路比较简单,
但是,细节有点多
- 思路如下
- 1、排序
- 2、数组为空或者数组最大值小于零,直接返回1
- 3、定位到第一个大于0的数字的位置
- 4、如果这个位置的数字大于1,直接返回1
- 5、进入循环部分,这部分是考虑的第一大于0的数字为1的情况
- 从第一个不为零的位置开始,然后定义一个值j与之相等,位置向下移动,那j++
- 比较j与num[k]若j小就返回j;
- 若数组中有重复的就跳过
public int firstMissingPositive(int[] nums) {
Arrays.sort(nums);
if(0==nums.length||nums[nums.length-1]<=0)return 1;
int i=0;
while (nums[i]<=0){
i++;
}
if(nums[i]>1)return 1;
for (int k=i,j=nums[i]; k<nums.length; k++) {
if (nums[k]>j)return j;
if(k-1>=0&&nums[k]==nums[k-1])continue;
j++;
}
return nums[nums.length-1]+1;
}