题目:
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
Note:
Your algorithm should run in O(n) time and uses constant extra space.
结题思路:对于没有排序的数组,找第一个缺失的正整数,也就是隐含的说这个缺失的数字在0-N(数组长度范围内),我们遍历整个给定的数组,通过交换的方式将数组中数放到对应位置,1放到nums[0],2放到nums[2],3放到nums[3]等等,
然后遍历已经放置好数据的数组,第一个位置不对应应放的数即为我们想要的结果,
public int firstMissingPositive(int[] nums) {
if(nums==null||nums.length<=0)
return 1;
int n =nums.length;
for(int i=0;i<nums.length;i++){
//如果给的nums数组中已有的数组在0-nums.length长度范围内,交换到属于它的位置
//如[2,1,5] 1属于位置1,2属于位置2 最后调整顺序后为[1,2,5]
while(nums[i]!=i+1&&nums[i]>=1&&nums[i]<=n&&nums[nums[i]-1]!=nums[i]){
int temp= nums[nums[i]-1];
nums[nums[i]-1] = nums[i];
nums[i] = temp;
}
}
//接着遍历判断,1位置是否是1,2位置是否2,等等下去,第一个位置不对应的即为我们想要的结果
for(int i=0;i<nums.length;i++){
if(nums[i]!=i+1){
return i+1;
}
}
//如果都对应上了,那么最小缺失的正数为数组长度加1,前面1对应1,2对应2,3对应3,都不缺,说明缺少4呗
return n+1;
}
}