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
给出一个没有排过序的数组,找出第一个丢失的正数
思路:
可以这样想,如果正数按顺序从index=0开始出现,那么index=0的地方应该放1,往后以此类推2,3,4
如果把正数依次换到它们应该在的位置上,那么遍历数组的index, index对应的数字如果不是index+1,那么index+1就是丢失的正数
注意交换位置的时候要用while循环,因为可能换过来的还是正数,还需要换,直到换过来的是负数或者正数已经在对的位置。
public int firstMissingPositive(int[] nums) {
if(nums == null || nums.length == 0) {
return 1;
}
for(int i = 0; i < nums.length; i++) {
//这里注意要用while循环,因为换过来的可能是正数还不在相应的位置上
while(nums[i] > 0 && nums[i] <= nums.length &&
nums[nums[i] - 1] != nums[i]) {
//swap
int tmp = nums[nums[i] - 1];
nums[nums[i] - 1] = nums[i];
nums[i] = tmp;
}
}
for(int i = 0; i < nums.length; i++) {
if(nums[i] != i + 1) {
return (i+1);
}
}
return (nums.length + 1);
}